[ 06.20 ] k번째 수

프로그래머스 1단계 문제.
문제 한번 이해하고 나니 쬐~까 쉬웠다잉 ? ㅎ

문제 설명

배열 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 함수를 작성해주세요.

1. 입출력 예시의 이해

주어진 array = [1,5,2,6,3,7,4] 라고 할때,
commands 의 [[2,5,3],[4,4,1],[1,7,3]] 이중배열 에서 각 0번째는 i가 되고 1번째는 j, 2번째 인덱스는 k가 된다.
array 에서 i 번째부터, j번째 인덱스를 자른 후 그 배열을 정렬하고,
그 정렬된 배열에서 k번째 수를 알아낸다.
마지막으로, 각 commands 의 배열마다 알아낸 k번째 숫자를
새로운 배열에 push 하면 된다.

2. 수도코드 작성

(1) commaneds 를 한바퀴 다 돌아서 탐색해야 하므로 for문탐색.
(2) 필요한 변수를 만들어준다.

split 으로 잘라줄 예정이므로 split(,) 두 자리에 올 변수명을 만들어주겠다.
let i = commands[c][0]-1 //start 의 개념
let j = commands[c][1] //end 의 개념
let k = commands[c][2]-1 //index 를 구해야하므로 length보다-1해준다.

(3) 스플릿으로 잘라준 배열들을 sort 메소드를 이용하여 정렬한다.
(4) 정렬한 배열들에서 k번째에 있는 수를 뽑아낸다.
(5) 뽑아낸 수들을 새로운 배열에 push 해준다.

3. 코드 작성

function solution(array, commands) {
    let answer = [];
    
    //array = [1,5,2,6,3,7,4] 
    //commands [[2,5,3],[4,4,1],[1,7,3]] -> 각각 c의[i,j,k] 
    //commands[c]의 0번째 인덱스 (i)start => array[i-1] 
    //commands[c]의 1번째 인덱스 (j)end => array[j] ->sort
    //commands[c]의 2번째 인덱스 k => array[k-1] 한것을 result 에 push 하여 담는다. 
    
    for(let c = 0; c < commands.length;c++){
        // 변수 선언해주기
        let i = commands[c][0]-1; // [1,3,0]
        let j = commands[c][1]; //[5,4,7]
        let k = commands[c][2]-1; // [3,0,2] 
        
        let newArr = array.slice(i,j); // [1,5],[3,4],[0,7]
        newArr.sort((a,b)=>a-b) ;//순서대로 나열. [5,2,6,3,7] -> [2,3,5,6,7]

        answer.push(newArr[k]) 

}
    return answer;
}

좋은 웹페이지 즐겨찾기