위코드 2주차 javascript 중간 시험

breeeeze·2020년 9월 30일
0

저번주(2주차) 금요일에 위코드에서 한시간동안 자바스크립트 중간 시험이 있었다! 평가를 위한 시험이라기 보다는 내가 어느 부분에서 부족한지 점검할 수 있도록 보는 시험 같았다.
문제는 기초 개념 위주로 어렵지 않게 나왔다. 시험이라길래 처음에는 살짝 긴장했었는데 오히려 1주차 때 했던 자바스크립트 레플릿 문제들이 훠얼씬 어려웠다.

01. 짝수/홀수를 판별하는 함수

첫번째 문제는 짝/홀을 판별하는 함수를 작성하는 것으로, 함수에 인자로 숫자를 넣으면 "짝수 입니다" 혹은 "짝수가 아닙니다" 문구를 리턴하는 함수를 구현하는 것이다.

function is_even(num) {
  if (num%2 === 0) {
    return "짝수 입니다";
  } else {
    return "짝수가 아닙니다";
  }
}

나눈 값의 나머지를 받는 '%' 연산자를 사용하여 2로 나눈 나머지가 0이면 짝수, 그렇지 않으면 홀수라는 것을 판별할 수 있다.

02. 문자열의 특정 문자를 기준으로 새로운 문자열 반환하는 함수

두번째 문제는 문자열이 주어졌을 때 '-'를 기준으로 앞에 있는 문자열을 반환하는 함수를 작성하는 것이다.

function get_prefix(str) {
  let index = str.indexOf('-');
  return str.slice(0, index);
}

나는 함수 안에 먼저 index라는 변수를 만들어 indexOf 메소드를 사용해 인자로 받은 문자열에서 '-' 문자가 있는 인덱스를 찾는다. 그런 다음 slice 메소드를 사용해 반환할 문자열 부분만 잘라주는데, 주어진 문자를 기준으로 앞에 있는 문자열을 반환하면 되는 것이므로 0 부터 '-'의 인덱스가 담겨있는 변수 index까지로 길이를 설정해주었다.

function get_prefix(word) {
  return word.split('-')[0];
}

그런데 model solution을 보니 split 메소드로 더 간단히 해결이 가능했다. split을 사용해 '-'로 문자열을 나누고 나눠진 문자열의 앞부분을 받아오기 위해 첫번째 부분인 [0]을 리턴한 것인데 나는 split 자체를 생각하지 못했어서 많이 쓰이는 메소드 종류들을 좀 더 익힐 필요성을 느꼈다.

03. 팁과 세금 포함한 식사값 계산하는 함수

팁과 세금이 포함되지 않은 식사값에 9.5%의 세금과 15%의 팁을 포함한 식사값을 리턴하는 함수를 작성하는 문제.

function calculate_total(price) {
  let totalPrice = price+(price*0.095)+(price*0.15);
  
  return totalPrice;
}

순수 식사값 price에 price0.095의 세금을 더 하고, 또 price0.15의 팁을 더 하면 최종 식사값이 나온다.
나는 최종 식사값을 따로 변수로 만들어서 그 변수를 리턴했는데 이런 경우 그냥 바로 return price+(price0.095)+(price0.15); 해도 괜찮았겠다.

문자열에서 특정 문자의 첫번째 위치를 찾는 함수

네번째 문제는 문자열 안의 특정 문자가 있는 첫번째 인덱스 값을 반환하는 함수를 만드는 것이다. 그 문자가 없으면 -1을 반환하고, indexOf 함수를 사용하지 않는 것이 조건이었다.

function get_find(txt, str) {
  return str.search(txt);
}

나는 구글링 해보니 특정 문자의 인덱스 값을 반환해주는 search라는 메소드를 찾았고, 얘를 쓰니까 바로 해결이 됐다.... 문제 조건대로 search도 문자열에 그 문자열이 없으면 -1값을 반환해준다.

function get_find(filter, sentence) {
  for (let i = 0; i < sentence.length; i++) {
    if (sentence[i] === filter) {
      return i;
    }
  }
  return -1;
}

model solution에서는 이렇게 문자열의 구성 요소들을 하나하나 for문으로 돌면서 만약 주어진 문자가 있으면 그 문자의 인덱스인 i를 반환해주고 없으면 -1을 반환해주는 식으로 해결을 했다.
search를 쓰면 더 간단하긴 하지만 난 아직은 이런 로직들을 생각하는 연습을 하는 단계이므로 잘 익혀둬야겠다.

05. 배열 속 단어 중 가장 긴 단어 찾는 함수

마지막 문제는 단어로 이루어진 배열 속에서 가장 긴 단어를 찾아 리턴하는 함수를 만드는 것이었다.

function find_longest_word(arr) {
  let max = 0;
  for (i=0; i<arr.length; i++) {
    if(max < arr[i].length) {
      max = arr[i].length;
    }
  }
  
  for (i=0; i<arr.length; i++) {
    if(max === arr[i].length) {
      return arr[i];
    }
  }
}

나는 이렇게 먼저 for문을 사용해 배열의 요소들을 하나하나 돌면서 .length 메소드로 각각 요소들의 길이를 측정하고 가장 긴 길이를 max라는 변수에 담은 후, 다시 for문으로 배열을 돌아 max값의 길이를 가진 요소를 찾아내서 리턴하는 방법을 썼다.

function find_longest_word(arr) {
  let longest = arr[0];
  for(let i = 0; i < arr.length; i++) {
    if(arr[i].length > longest.length) {
      longest = arr[i];
    }
  }
  return longest;
}

model solution에서는 배열의 첫번째 요소인 arr[0]을 기준으로 삼고, for문을 이용해 배열을 돌며 비교해가면서 긴 요소를 longest라는 변수에 담는 방식으로 해결을 했다. 이렇게 하면 for문을 한번만 돌려서 해결이 가능하므로 내가 짠 코드보다 훨씬 효율적이다!

느낀 점

이번 시험에서 뿐만 아니라 평소에도 나는 20줄로 간신히 구현한 걸 남들은 5줄로 쉽고 간단하게 구현한 걸 보면 어떻게 저런 생각을 할 수 있을까 신기하기도 하고 조급해지기도 한다ㅠㅠ
앞으로 크게크게 보면서 효율적인 로직을 생각하는 연습을 많이 해야할 것 같다고 다시금 느끼는 계기였다!

0개의 댓글