자바스크립트 코딩테스트 연습 2일차

Y·2020년 7월 29일
0

문제 1


내 풀이


function findShort(s){
  const wordList = s.split(' ');
  let answer= wordList[0].length;
  for(let i=0;i<wordList.length;i++){
    const wordLen = wordList[i].length;
    if (answer > wordLen){
      answer = wordLen;
    }  
  }
  return answer
}

가장 먼저 든 생각은, split메서드를 통해 각 단어의 배열을 만들고 각 단어들의 길이를 가지는 배열로 바꾸려고 했었다. 근데 굳이 복잡할 것 같아서 각 인자의 길이를 모두 비교하는 코드를 짰다.

추천 풀이


function findShort(s){
  return Math.min.apply(null, s.split(' ').map(word=> word.length);

공부


파이썬과 달리, 자바스크립트에서는 Math.min() 메서드에 배열을 인자로 집어넣을 수 없다. 공식 문서에 의하면 Math.min()의 인자는 숫자형이여야한다. 따라서, 가령 Math.min(1,2,3) 형태로 넘겨줘야만 한다. 이 과정에 apply() 메서드를 사용한다.
apply() 메서드는 첫번째 인자로 함수 내부에서 사용될 this로 바인딩될 객체를 전달하고, 두번째 인자로 호출한 함수에 쓰일 인자들로 단일 배열을 넘긴다. 따라서, 위의식에선 Math.min(1,2,3) 의 형태로 함수가 실행된다.

문제 2


내 풀이


function descendingOrder(n){
  const answerNum = n.toString().split('').sort(function (a,b){return b-a}).join('');
  return parseInt(answerNum)
}

추천 풀이


내 코드와 일치했다.

공부


Array.prototype.sort() 메서드는 인자로 compareFunction을 받는다. 말 그대로, 정렬기준을 정해주는 함수를 인자로 받는다. 숫자비교시 내림차순 오름차순을 하기위해 다음과 같은 compareFunction을 사용한다.

function compareNumbers(a, b) {
  return b - a;
}

그 이유는 MDN 문서에 따르면 다음과 같다.

출처 : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

default로는 유니코드 포인트를 기반으로 정렬된다고 한다.

문제 3


내 풀이


function openOrSenior(data){
  const answer=[];
  for (let list of data) {
    answer.push((list[0]>=55 && list[1]>7 && "Senior") || "Open")
  }
  return answer;
}

논리연산자를 통해 한번에 해결하고 싶었다.

추천 풀이


function openOrSenior(data){
  return data.map(([age, handicap]) => (age > 54 && handicap > 7) ? 'Senior' : 'Open');
}

공부


논리 연산의 결과에 따라 boolean값을 반환할지, 문자열을 반환할지에따라 순서가 중요하다. 나의 풀이에서는 Senior 조건(boolean)이 참이될때 문자열 Senior을, 거짓이 될때 false를 반환하기위해서 (list[0]>=55 && list[1]>7 && "Senior" 라고코드를 짰다.
생각해보니, 삼항연산자를 사용하면 간단했다.
map()메서드를 통해, [age,handicap]을 인자로받고, 조건문이 참일때 Senior, 거짓일때 Open을 반환하는 함수를 사용하면 된다.

삼항연사자의 기본 구조


condition ? exprIfTrue : exprIfFalse 
  • condition이 참일경우, exprIfTrue를 반환
  • condition이 거짓일 경우, exprIfFalse를 반환한다.
profile
연세대학교 산업공학과 웹개발 JavaScript

0개의 댓글