알고리즘연습기록>정렬>K번째수

알고리즘연습>정렬>K번째수

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

// Pseudo code
// array는 comands의 길이만큼 계속 사용되어야 한다. => arr
// arr를 i부터 j까지 자를 수 있는 메소드로 자른다. => slicedArray = arr.slice(i-1, j)
// slicedArray를 정렬한다. slicedArray.sort()
// slicedArray의 k번째 요소를 answer에 push한다. => answer.push(slicedArray[k-1])

// 반복 => commands의 수만큼 위의 과정이 반복된다.

// 문제 발견: 테스트중 하나가 통과되지 않았었다. => sort()메소드에 compareFunction를 지정해줌으로 해결할 수 있었다. 
// compareFunction에 주어지지 않으면, sort()는 요소를 문자열로 변환하고 유니 코드 코드 포인트 순서로 문자열을 비교하여 정렬된다. 
// 즉, 숫자 정렬에서는 9가 80보다 앞에 오지만 숫자는 문자열로 변환되기 때문에 "80"은 유니 코드 순서에서 "9"앞에 오게된다. 

좋은 웹페이지 즐겨찾기