본문 바로가기

프로그래밍 공부/프로그래머스 코딩테스트

[프로그래머스] 자바스크립트 LV1 K번째수

K번째수
문제 설명

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

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

  1. array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
  2. 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
  3. 2에서 나온 배열의 3번째 숫자는 5입니다.

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

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

더보기
1
2
3
4
5
6
7
8
9
function solution(array, commands) {
    let result = [];
    let answer;
    for(let i=0; i<commands.length; i++){
        answer = array.slice(commands[i][0]-1, commands[i][1]).sort((a,b)=>a-b)
        result.push(answer[commands[i][2]-1]);
    }
    return result;
}
cs

function solution에 받은 매개변수 array는 숫자의 배열이고, commands는 숫자의 배열로 이루어진 2차원 배열이다. commands 배열안에 배열의 인덱스의 인수를 하나씩 꺼낼 필요가 있다. 

for 반복문을 이용해 commands의 배열 안의 배열에 접근을 한다. 배열안에 배열중 0번째 인덱스의 숫자부터 1번째 인덱스의 숫자까지를 잘라내고 잘라낸 배열을 순서대로 정렬하고 2번째 인덱스의 숫자 번째의 수를 종합해 리턴해야 한다.

for 반복문으로 commands 배열에 인덱스에 접근하고, array 배열을 slice() 메서드를 이용해 array.slice(command[i][0]-1), commands[i][1])을 이용해 잘라낸다.

commands[i][0]-1을 하는 이유는 배열 인덱스의 시작은 0번째 부터 이기 때문이다. 따라서 2번째부터 시작하기 위해서는 인덱스는 1부터 시작해야 한다.

그리고 sort() 메서드를 이용해 순서를 정렬하고 push() 메서드를 이용해 commands 배열의 3번째에 있는 숫자 번째의 인수를 답으로 제출할 배열에 넣는다.

여기에서도 push(answer[commands[i][2]-1]); 에서 -1을 해주어야 인덱스에 맞는 값을 가져올 수 있다.