본문 바로가기
알고리즘

[프로그래머스/자바스크립트] 정렬_K번째수

2021. 11. 19.

https://programmers.co.kr/learn/courses/30/lessons/42748

 

코딩테스트 연습 - K번째수

[1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3]

programmers.co.kr

첫번째 풀이 (일부 케이스 틀림)

function solution(array, commands) {
  var answer = [];
  commands.forEach((cmd) => {
    var start = cmd[0];
    var end = cmd[1];
    var num = cmd[2];
    var target = array.slice(start - 1, end).sort()[num - 1];
    answer.push(target);
  });
  return answer;
}

두번째 풀이 (정답)

 

function solution(array, commands) {
  var answer = [];
  commands.forEach((cmd) => {
    var start = cmd[0];
    var end = cmd[1];
    var num = cmd[2];
    var target = array.slice(start - 1, end).sort((a, b) => a - b)[num - 1];
    answer.push(target);
  });
  return answer;
}

 

- sort() 의 functionless 버전과 sort(comparefunction)의 차이를 알아야 한다.

전자도 정렬은 되지만 문자로서 정렬하기 때문에 한 자릿수에서는 큰 문제가 없지만 두자리가 넘어가는 수를 정렬할 때는 문제가 생긴다.

ex) sort()로 [15, 2, 4] 를 정렬하면 [2, 4, 15] 가 아니라, [15, 2, 4] 로 정렬한다. 문자로 인식하기 때문.

그러므로 제대로 정렬하기 위해서는 위와 같은 comparefunction을 넣어줘야 한다. (현재 케이스는 오름차순)

 

댓글