[JavaScript] K번째 수

13079 단어 JavaScriptJavaScript

문제 보기
https://programmers.co.kr/learn/courses/30/lessons/42748?language=javascript

나의 풀이

function solution(array, commands) {
    var answer = [];
    let arr = [];
    let command = [];
    
    for (const arrItem of array) {
        arr.push(arrItem);
    };

    for (const commandItem of commands) {
        command.push(commandItem);
    };
    
    for(let i = 0; i < command.length; i++) {
        let commandI = command[i][0];
        let commandJ = command[i][1];
        let commandk = command[i][2];
        let arrCut = (arr.slice(commandI - 1, commandJ)).sort((a, b) => a - b);

        answer.push(arrCut[commandk - 1]);
    }
    
    return answer;
}

막혔던 부분

첫 시도에서 테스트케이스2를 통과하지 못했다.
sort() 의 경우 사전식 정렬되는데, (ex. [1, 3, 10, 2] => [1, 10, 2, 3]) 이 부분이 문제가 되었다.
오름차순으로 정렬되도록 고친 이후에 모든 테스트 케이스를 통과했다.

해결방법 - 오름차순 내림차순 정렬

const numbers = [15, 52, 23, 11, 9]; 

// 오름차순 정렬, 원본 배열 수정 
numbers.sort((a, b) => a - b); console.log(numbers); // [9, 11, 15, 23, 52] 

// 내림차순 정렬, 원본 배열이 다시 수정 
numbers.sort((a, b) => b - a); console.log(numbers); // [52, 23, 15, 11, 9]

// 출처: https://hohoya33.tistory.com/139 [개발 메모장]

다른 사람의 풀이 분석

1번

function solution(array, commands) {
    return commands.map(command => {
        const [sPosition, ePosition, position] = command
        const newArray = array
            .filter((value, fIndex) => fIndex >= sPosition - 1 && fIndex <= ePosition - 1)
            .sort((a,b) => a - b)    
    
        return newArray[position - 1]
    })
}

// 출처: https://programmers.co.kr/learn/courses/30/lessons/42748/solution_groups?language=javascript&type=all

2번

function solution(array, commands) {
    return commands.map(v => {
        return array.slice(v[0] - 1, v[1]).sort((a, b) => a - b).slice(v[2] - 1, v[2])[0];
    });
}

// 출처: https://programmers.co.kr/learn/courses/30/lessons/42748/solution_groups?language=javascript&type=all

좋은 웹페이지 즐겨찾기