[프로그래머스 JS] K번째수

이얀·2021년 10월 26일
0

알고리즘

목록 보기
4/22

문제 설명

배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.

예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면

array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
2에서 나온 배열의 3번째 숫자는 5입니다.
배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.

제한 조건

array의 길이는 1 이상 100 이하입니다.
array의 각 원소는 1 이상 100 이하입니다.
commands의 길이는 1 이상 50 이하입니다.
commands의 각 원소는 길이가 3입니다.

입출력 예

array / commands / return
[1, 5, 2, 6, 3, 7, 4] / [[2, 5, 3], [4, 4, 1], [1, 7, 3]] / [5, 6, 3]

풀이

const solution = (array, commands) => {
  let sliceArr = [];
  commands.forEach((elm) => {
    sliceArr.push(array.slice(elm[0] - 1, elm[1]).sort((a,b) => a-b)[elm[2] - 1]);
  });
  return sliceArr;
};

구현방법

  1. commands가 이중배열이므로 forEach를 돌린다.
  2. commands 원소의 첫번째 숫자와 두번째 숫자를 이용해 함수를 자른다. (slice 사용)
  3. sort를 사용해 숫자를 정렬한다.
  4. commands의 세번째 숫자를 이용해 3에서 정렬한 배열의 몇번째 원소를 return 할 지 결정한다.
  5. sliceArr에 push 한다.

학습한 점

sort 메서드
sort 메서드는 기본 정렬 순서는 문자열의 유니코드 코드 포인트를 따른다.
그렇기 때문에 숫자를 비교하기 위해서 compareFunction을 써주어야 한다.

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

0개의 댓글