Sorting Algorithm - K번째수

chu·2021년 6월 6일

현재는 웹에 대한 기본적인 내용에 대해 공부를 하고 있다.


이번에는 정렬을 이용한 프로그래머스 기출 문제인 K번째수 라는 코딩테스트 문제다.
JS로 테스트가 가능하며, 레벨 1의 문제다.

문제

배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.

  1. array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
  2. 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
  3. 2에서 나온 배열의 3번째 숫자는 5입니다.
// 입력 예제
array - [1, 5, 2, 6, 3, 7, 4]
commands - [[2, 5, 3], [4, 4, 1], [1, 7, 3]]
return - [5, 6, 3]

자세한 문제는 여기서 확인해주세요.

풀이 코드

function solution(array, commands) {
  let answer = [];
  let sum = [];
  for (let i = 0; i < commands.length; i++) {
    sum.push(array.slice((commands[i][0]-1), (commands[i][1])));
    sum[i].sort((a, b) => a - b);
    answer.push(sum[i][commands[i][2]-1]);
  }
  return answer;
}

코드 뜯자!

// 첫번째 루프 - 0
// 2차원 배열 중 0번째 - [2, 5, 3]
// (commands[i][0]-1) -> 1
// (commands[i][1]) -> 5
// [1, 5, 2, 6, 3, 7, 4] -> [5, 2, 6, 3]
sum.push(array.slice((commands[i][0]-1), (commands[i][1])));

// [5, 2, 6, 3]를 sort 함수로 오름차순 정렬
sum[i].sort((a, b) => a - b);

// [2, 3, 5, 6] 상태
// 마지막으로 정렬된 배열에 commands[i][2]-1에서 나온 수의 번째를 뽑아
// answer에 push
answer.push(sum[i][commands[i][2]-1]);

간단하게 for문과 배열 내장함수를 사용하여 위와 같은 로직으로 풀이하였으며, for문이 모두 루프하면 [5, 6, 3]인 출력된다.

profile
한 걸음 한걸음 / 현재는 알고리즘 공부 중!

0개의 댓글