IT/JavaScript & TypeScript

[JavaScript/알고리즘] K번째수 (feat. sort() 메소드)

땅일단 2024. 12. 17. 22:37

프로그래머스 Lv.1 "K번째수" 문제입니다.

 

Solved-Algorithm/JavaScript/프로그래머스/1/42748. K번째수 at main · ParkBible/Solved-Algorithm

This is an auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - ParkBible/Solved-Algorithm

github.com

??? : 어 겁나 쉽네

 

 

 

function solution(array, commands) {
    const results = [];
    
    for (command of commands) {
        const [i, j, k] = command;
        results.push(array.slice(i - 1, j).sort()[k - 1]);        
    }
    
    return results;
}

뚝딱뚝딱

 

 

 

 

???????

 

 

 

 

 

.sort() 메소드에 상상도 못한 로직이 숨겨져 있었습니다.

이 녀석은 배열의 요소를 문자열로 바꿔서 비교한다고 합니다.

 

[1, 100, -1, 2, -2].sort();    // [-1, -2, 1, 100, 2]

 

당황스러운 결과가 나오는 것을 볼 수 있습니다. 그래서 아래와 같이 코드를 변경해야 합니다.

 

 

 

[1, 100, -1, 2, -2].sort((a, b) => a - b);    // [-2, -1, 1, 2, 100]

 

sort() 메소드는 두 개의 인자(편의상 a, b)를 가지고 있는 콜백 함수를 인자로 받습니다.

a와 b는 배열 안의 임의의 두 요소를 뜻합니다.

  • 콜백 함수가 음수를 리턴하면 a는 b의 앞에 옵니다.
  • 양수를 리턴하면 b가 a의 앞에 옵니다.
  • 0을 리턴하면 그대로 유지합니다.

 

그래서 결국 위의 성질을 이용하여 배열을 오름차순으로 정렬한 것이죠.

 

 


Lv.1 문제에서도 몰랐던 부분이 있네요... 오늘도 한수 배우고 갑니다.