TIL_34_with Wecode 024 javascript 중간 시험

JIEUN·2021년 2월 27일
0
post-thumbnail

어제는 2주차 금요일이라서 중간시험을 보았다. 각 질문과 나의 코드를 살펴보는 시간을.. 가져보겠다..

  1. 짝수인지 판별하는 함수 isEven을 작성 주세요.
    console.log(13); //"짝수가 아닙니다."
    console.log(10); //"짝수 입니다." 란 결과가 나오도록 하는 문제였다.
 function isEven(num) {
  if (num %2 === 0 ) {
    return "짝수 입니다.";
  } else {
   return "짝수가 아닙니다.";
   }
}

산술 연산자를 알고있다면, 쉽게 풀 수 있는 문제였다. 말그대로 함수 isEven 의 인자값을 2로 나누었을 경우 나머지가 0 이라면, 짝수. 0이 아닐 경우 짝수가 아닌 것이다.
MDN 산술연산자

  1. calculateTotal 함수를 작성하세요.
    팁과 세금을 제외한 식사값이 주어졌을때, calculateTotal 함수는 팁과 세금이 포함된 총 식사값을 반환합니다.
    Notes:
    세금은 9.5% 팁은 15% 로 계산하세요.
    팁을 계산할때 세금을 포함하여 계산하지 마세요.
function calculateTotal(amount) {
  const getTax = amount * 0.095
  const getTip = amount * 0.15
  const totalAmount = getTax + getTip + amount
  return totalAmount;
}

좀 더 간단한 방법이 있을 것 같기는 한데.. 아무튼 세금값을 구해주는 변수, 팁을 구해주는 변수, 그리고 세금, 팁, 가격을 모두 더한 변수를 지정해주면 된다. 수학을 무서워하는 나는.. 세금 9.5% 와 팁 15% 구하라고 하는 것만으로도 심장 쿵했음..ㅎㅎ

  1. getPrefix 함수를 작성하세요.
    문자열이 주어졌을때, -를 기준으로 앞에 있는 문자열을 반환하세요.
    console.log(getPrefix('BTC-KRW')) // --> BTC
function getPrefix(str) {
  const getStr = str.split('-');
  return getStr[0];
}

split 메소드를 사용하면 '-' 이 부분을 기준으로 해서 두 개의 배열로 나뉘게 된다. 그러면 '-' 이 부분 앞에 있는 배열을 반환하면 되므로 return getStr[0]; 을 써주었다.
MDN split

getFind 함수를 작성하세요.
문자와 문자열이 주어졌을때,
getFind 함수는 주어진 문자열에서 주어진 문자가 나타나는 첫번째 위치를 반환합니다.
Notes:
문자열의 첫번째 문자는 인덱스 값 0 을 가집니다.
만약 문자열에 해당 문자가 여러번 나타나면, 첫번째로 나타나는 위치를 반환해야 합니다.
만약 문자가 문자열에 존재하지 않는다면, -1 을 반환해야 합니다.
중요!!
indexOf 함수를 사용하지 마세요.
const output = getFind('a', 'I am a hacker')
console.log(output) // --> 2

function getFind(filter, sentence) {
  for(let i = 0; i < sentence.length; i++) {
    if (filter === sentence[i]) {
      return i;
    }
  } return -1;
}
const output = getFind('a', 'I am a hacker')
console.log(output) // --> 2

for 문을 이용해, sentence 안에 들어갈 문장의 끝까지 반복이 될 수 있도록 지정해준다. 그리고 내가 찾을 단어가 문장안에 있다면, 그 문장의 순서를 반환.
그리고 없다면 -1을 반환.
솔직히 처음에 문제보고 바로 for문과 if문이 연결되지 않았다. 그저 멍때리면서.. 아 뭔 소리지 문제만 몇번이고 읽었던 것 같다. 동기들과 구글링의 도움으로 어쨌든 문자를 찾으려면 문자열에 있는 문자들을 하나씩 대조를 해봐야 할 것이고, 그러면 for문을 통해 문자를 찾아내면 되겠다는 생각을 도출해냈고 인덱스는 0부터 세고, 길이는 1부터 시작하니, sentence.length 까지 돌게하면 문장의 길이에 상관없이 문장의 끝까지 반복문은 돌 것이다. 그리고 내가 찾고자하는 단어가 찾아지면 어차피 if문은 처음 찾아진 그 시점에서 멈출 것이기 때문에, 알아서 첫번째로 나타난 시점이 전환될 수밖에 없다.

5번 find_longest_word 함수를 만들어 주세요.
주어진 리스트안에 있는 단어중 가장 긴 단어를 찾을수 있도록 함수를 완성해주세요.
console.log(find_longest_word(["PHP", "Exercises", "Backend"]))
// --> "Exercises"

function find_longest_word(arr) {
  let arrLength = arr.map(x => x.length);
  let maxLength = Math.max(...arrLength);
  let longestWord = arrLength.indexOf(maxLength);
  return arr[longestWord];
}

다들 문제를 보자마자 map 메소드를 떠올렸다는게 신기하다.. 나는 안떠오른다.. 연결이 안된다.. 그래서 난 Run JS를 통해 결과를 하나하나 대조해보았다.

let arrLength = arr.map(x => x.length);
map 메소드는 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환한다.
["PHP", "Exercises", "Backend"].map(x => x.length); 콘솔로 확인해보면, [ 3, 9, 7 ] 이라는 결과가 나온다. map 메소드를 통하여 배열 안에 있는 문자들의 길이를 새로운 배열로 반환되었음을 알 수 있다.
MDE map

let maxLength = Math.max(...arrLength);
Math.max 함수는 이름에서 알 수 있듯이 가장 큰 숫자를 반환해준다. Math.max(...[ 3, 9, 7 ]); 결과는 당연히 9.
MDN Math.max()

let longestWord = arrLength.indexOf(maxLength);
위에서 얻어낸 새로운 배열 안에서 가장 큰 숫자를 찾아내면 된다. 콘솔로 찍어보면 더 이해가 잘된다.
[3, 9, 7].indexOf(9); 결과는 1. 배열 안에서 1번째 순서에 있기 때문이다.
MDN indexOf

return arr[longestWord];
["PHP", "Exercises", "Backend"][1];
결과는 "Exercises" 를 반환.

잘 모를 땐 무조건 찍어보고 결과 확인하기! 이렇게 해보고 저렇게도 해보면 언젠가는 답이 나온다.

0개의 댓글