배열 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 함수를 작성해주세요.
제한사항- array의 길이는 1 이상 100 이하입니다.
- array의 각 원소는 1 이상 100 이하입니다.
- commands의 길이는 1 이상 50 이하입니다.
- commands의 각 원소는 길이가 3입니다.
[1, 5, 2, 6, 3, 7, 4] | [[2, 5, 3], [4, 4, 1], [1, 7, 3]] | [5, 6, 3] |
[1, 5, 2, 6, 3, 7, 4]를 2번째부터 5번째까지 자른 후 정렬합니다. [2, 3, 5, 6]의 세 번째 숫자는 5입니다.
[1, 5, 2, 6, 3, 7, 4]를 4번째부터 4번째까지 자른 후 정렬합니다. [6]의 첫 번째 숫자는 6입니다.
[1, 5, 2, 6, 3, 7, 4]를 1번째부터 7번째까지 자릅니다. [1, 2, 3, 4, 5, 6, 7]의 세 번째 숫자는 3입니다.
function solution(array, commands) {
let answer = [];
for(let i =0; i < commands.length; i++){
let start = commands[i][0]
let finish = commands[i][1]
let new_array = array.slice(start-1, finish)
let count = new_array.sort((a,b) => a-b)[commands[i][2] - 1]
answer.push(Number(count))
}
return answer
}
sort()로 해서 case2에서 오류가 낫다.
sort()는 숫자들도 정렬해주지만, 문자로 바꿔서 정렬해주기 때문에
sort((a,b) => a-b // b-a) 를 통해서 숫자를 정렬해줘야 문자열이 아닌 숫자 정렬이 되어 오류 발생이 없다.
var myArray = [5,3,4,1,2]; myArray.sort(function (a, b) { return a - b }); console.log(myArray); // 결과: [1, 2, 3, 4, 5] myArray.sort(function (a, b) { return b - a }); console.log(myArray); // 결과: [5, 4, 3, 2, 1]
이렇게 작동한다. return 값 a-b는 배열을 오름차순, b-a는 내림차순으로 정렬한다.
다소 직관적이지 않아 보이는 코드로 보였다. 그냥 .sort()만으로는 정렬이 안 되는 걸까? 안된다. 그 이유는 자바스크립트의 sort 함수는 기본적으로 배열을 문자열(String) 타입으로 간주하고 비교하기 때문이다. 예를 들어 [b,a,c]라는 배열에 .sort()를 적용하면 [a,b,c]로 알맞게 정렬해준다. 그런데 숫자도 마찬가지다. [90,100,110]을 sort()로 정렬하면 자바스크립트는 값을 "90" "100" "110"으로 간주하고 비교한다. 이때 "90"과 "100"을 비교 시 앞자리 9와 1을 비교, 100보다 90이 더 크다는 결론을 내린다.
'🗃️javascript > 프로그래머스' 카테고리의 다른 글
겹치는 선분의 길이 (0) | 2023.08.31 |
---|---|
폰켓몬(Lv.1)[해시의 개념을 생각해보고, 단순히 구현하자] (0) | 2023.06.20 |
n보다 커질 때까지 더하기(Lv.0)[함수 안에 조건달기] (0) | 2023.06.13 |
길이에 따른 연산(LV.0)[reduce((현재값, 누적공간, 인덱스)=> 식, 초기값)] (0) | 2023.06.10 |
n 번째 원소까지(Lv.0)[다시 코테연습 시작] (0) | 2023.06.09 |