JavaScript의 Replit 문제를 풀어보고 위코드에서 같이 공부하는 분들 중 소미님, 수정님과 코드를 비교해보는 시간을 가지게 되었다.
그래서 이번 글에서는 내 코드와 다른 분들의 코드를 비교해보고 어떤 차이가 있는지 알아보려고 한다.
짝수인지 판별하는 함수 isEven을 작성 주세요.
console.log(isEven(11)) // --> "짝수가 아닙니다." console.log(isEven(10)) // --> "짝수 입니다."
첫 번째 문제는 숫자를 인자로 주었을 때 그 인자가 짝수인지 판별하는 함수이다. 이 문제는 비교적 쉽게 풀 수 있었다.
function isEven(num) {
if ((num % 2) === 0) return '짝수 입니다.';
else return '짝수가 아닙니다.';
}
calculateTotal 함수를 작성하세요.
팁과 세금을 제외한 식사값이 주어졌을때, calculateTotal 함수는 팁과 세금이 포함된 총 식사값을 반환합니다.
Notes:
- 세금은 9.5% 팁은 15% 로 계산하세요.
- 팁을 계산할때 세금을 포함하여 계산하지 마세요.
console.log(calculateTotal(20)); // --> 24.9
function calculateTotal(amount) {
const tax = amount * 0.095;
const tip = amount * 0.15;
const result = amount + tax + tip;
return result;
}
tax
, tip
변수에다가 각각 계산한 결과값을 저장한 후, result에다가 팁과 세금이 포함된 총 식사값을 담아 반환하였다.function calculateTotal(amount) {
return amount + amount*0.095 + amount*0.15
}
function calculateTotal(amount) {
return amount + calculateTip(amount) + calculateTax(amount);
}
function calculateTip(amount) {
return amount*0.15;
}
function calculateTax(amount) {
return amount*0.095;
}
getPrefix 함수를 작성하세요.
문자열이 주어졌을때, -를 기준으로 앞에 있는 문자열을 반환하세요.
console.log(getPrefix('BTC-KRW')) // --> BTC
function getPrefix(str) {
const linePosition = str.indexOf('-');
const sliceWord = str.slice(0, linePosition);
return sliceWord;
}
indexOf
함수로 문자열에서 '-'의 위치를 찾는다.slice
함수로 내가 출력하고 싶은 부분까지 단어를 추출한다.function getPrefix(str) {
const string = str.split("-");
return string[0]
}
split
함수를 이용해서 출력하셨다.slice
함수를 이용하면 끝의 기준이 되는 인덱스를 먼저 찾아야하지만 소미님처럼 split을 이용할 경우에는 그냥 문자열을 나눠서 저장한 배열에서 해당되는 단어를 그냥 찾으면 되기 때문에 훨씬 간편하다는 것을 느꼈다.getFind 함수를 작성하세요.
문자와 문자열이 주어졌을때, getFind 함수는 주어진 문자열에서 주어진 문자가 나타나는 첫번째 위치를 반환합니다.
Notes: 문자열의 첫번째 문자는 인덱스 값 0 을 가집니다. 만약 문자열에 해당 문자가 여러번 나타나면, 첫번째로 나타나는 위치를 반환해야 합니다. 만약 문자가 문자열에 존재하지 않는다면, -1 을 반환해야 합니다.
중요!! indexOf 함수를 사용하지 마세요.
const output = getFind('a', 'I am a hacker') console.log(output) // --> 2
function getFind(filter, sentence) {
if (sentence.includes(filter)) {
for (let i = 0; i < sentence.length; i++) {
if (sentence[i] === filter) return i;
}
} else return -1;
}
include
함수를 사용해서 코드를 작성하면 되겠다는 생각을 하게 되었다.Code Flow
- 인자로 주어진 문자열에 필터링할 문자가 포함되어있는지 파악한다.
- 문자가 있다면 for 반복문을 실행시킨다.
- 만약 필터링할 문자가 문자열안에 있는 문자와 일치하면 해당 인덱스를 리턴한다.
- 문자가 없다면 -1을 리턴한다.
function getFind(filter, sentence) {
return result = sentence.search(filter);
}
search
라는 함수를 사용하셔서 문자열 안에 필터링할 문자가 있으면 인덱스를 반환하셨다.search
는 필터링할 문자가 반복된다면 가장 첫 번째로 매치되는 문자의 인덱스를 반환한다.function getFind(filter, sentence) {
// 아래 코드를 작성해주세요.
let stringtoArray = sentence.split('');
for (i=0; i<stringtoArray.length; i++) {
if( stringtoArray[i] === filter) {
return i
}
}
if (stringtoArray[i] !== filter) {
return -1
}
}
split
함수를 사용하셔서 문자열 안에 있는 공백을 포함한 문자 하나하나를 stringtoArray라는 배열에 저장하셨다.split
은 생각지도 못했는데 수정님 코드 덕분에 이렇게도 접근할 수 있다는 것을 알게 되어서 너무 좋았다.find_longest_word 함수를 만들어 주세요.
주어진 리스트안에 있는 단어중 가장 긴 단어를 찾을수 있도록 함수를 완성해주세요.
console.log(find_longest_word(["PHP", "Exercises", "Backend"])) // --> "Exercises"
function find_longest_word(arr) {
let max = arr[0].length;
let result;
for (let i = 0; i < arr.length; i++) {
if (max < arr[i].length)
max = arr[i].length;
if (max === arr[i].length) result = arr[i];
}
return result;
}
Code Flow
- max라는 변수 안에 배열의 첫 번째 요소의 길이를 담는다. 이것은 비교의 기준이 될 변수이다.
- for문을 이용하여 들어있는 배열의 요소만큼 안의 코드를 반복 실행한다.
- arr 배열 요소의 길이가 arr 배열 첫번째 요소의 길이보다 크다면 max 안의 값을 길이가 큰 요소의 길이로 변경한다.
- 만약 max 안에 담긴 길이가 arr 배열 안의 각 요소의 길이와 같다면 그 배열의 요소를 result에 담는다.
- result를 리턴한다.
function find_longest_word(arr) {
// 아래 코드를 구현해주세요.
let maxLength = arr[0].length
for (let i in arr){
if (arr[i].length>maxLength){
maxLength = arr[i].length;
return arr[i];
}
}
}
❗️❗️ 블로깅 중 이 코드의 오류와 필요없는 변수를 발견하였다!
function find_longest_word(arr) {
let num = arr[0];
for (let i in arr){
if (arr[i].length > num.length){
num = arr[i];
}
}
return num;
}
와! 정상적으로 작동되었다!🎉
✏️ 너무 유익했던 시간이었어요 지수님..! 오류의 발견의 연속이지만 그래도 함께하니까 할 수 있어요 !