https://school.programmers.co.kr/learn/courses/30/lessons/120835
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
function solution(emergency) {
let sorted = emergency.slice().sort((a,b)=>b-a);
return emergency.map(v=>sorted.indexOf(v)+1);
}
sort((a,b)=> b-a) 는 내림차순해주는 함수
예를들어
sorted.indexOf(v)는 sorted 배열에서 v의 인덱스를 찾아서 반환합니다. 그리고 +1을 해주면 v가 sorted 배열에서 몇 번째로 큰 요소인지를 나타내는 순위를 구할 수 있습니다. 이 순위를 배열에 추가하여 새로운 배열을 생성합니다.
v가 10일 때, sorted.indexOf(v)+1은 2가 됩니다. 따라서 새로운 배열에 2가 추가됩니다.
v가 5일 때, sorted.indexOf(v)+1은 3이 됩니다. 따라서 새로운 배열에 3이 추가됩니다.
v가 20일 때, sorted.indexOf(v)+1은 1이 됩니다. 따라서 새로운 배열에 1이 추가됩니다.
따라서 emergency.map(v=>sorted.indexOf(v)+1)의 결과는 [2, 3, 1]이 됩니다. 이 배열은 emergency 배열에서 각 요소가 내림차순으로 정렬되었을 때 몇 번째로 큰 요소인지를 나타냅니다.
slice 해주는 이유?
slice()를 사용하지 않고도 이 코드를 작성할 수 있습니다. slice()를 사용하는 이유는 원본 배열의 순서를 변경하지 않고 새로운 배열을 만들기 위해서입니다.
만약 slice()를 사용하지 않으면 sort() 함수가 원본 배열을 변경하게 되고, map() 함수가 적용되는 emergency 배열의 순서도 변경됩니다. 이렇게 되면 순위를 찾아내는 작업이 제대로 이루어지지 않게 되고, 원하는 결과를 얻을 수 없게 됩니다.
따라서 이 코드에서는 slice()를 사용하여 원본 배열을 변경하지 않고 새로운 배열을 만들어서 순위를 찾아내는 것이 보다 안전한 방법이라고 할 수 있습니다.
'[python] > 알고리즘 공부' 카테고리의 다른 글
프로그래머스 모스부호(1) [자바스크립트] (1) | 2023.04.16 |
---|---|
프로그래머스 개미 군단 [자바스크립트] (0) | 2023.04.16 |
프로그래머스 외계행성의나이 [자바스크립트] (0) | 2023.04.15 |
프로그래머스 배열 자르기[자바스크립트] (0) | 2023.04.15 |
프로그래머스 특정 문자 제거하기 [자바스크립트] (0) | 2023.04.14 |