[06.20]k回カウント

1780 ワード

プログラマーの第1段階の問題.
一度問題を理解して、本当に簡単です.ほほほ

問題の説明


配列の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です.
配列,[i,j,k]を要素とする2次元配列コマンドをパラメータとして指定する場合は、前述した演算をコマンドのすべての要素に適用した結果を配列に戻して解く関数を作成します.

1.I/Oの例を理解する


与えられた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番目の数を探し出す.
最後に、各コマンドの配列では、
新しい配列に押せばいいです.

2.首都コードの作成


(1)カンマの周りを一周するのでfor文を検索する.
(2)必要な変数を作成する.
splitにカットするため、split(,)の2つの位置の変数に名前を付けます.
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)抽出した数字を新しい配列にプッシュする.

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;
}