< 오늘의 문제 >
진료순서 정하기

진료순서 정하기
function solution(emergency) {
let sortedNum = emergency.slice().sort((a, b) => b - a);
return emergency.map(value => sortedNum.indexOf(value) + 1);
}
- 나의 풀이
: emergency 배열을 복사한 후, 복사한 배열을 내림차순으로 정렬한다.
이때, slice() 메서드를 사용하여 원래 배열을 변경하지 않고 복사본을 만든다.
만약 slice()를 사용하지 않으면 sort() 함수가 원본 배열을 변경하게 되고, map() 함수가 적용되는 emergency 배열의 순서도 변경된다.
이렇게 정렬된 배열은 sortedNum에 저장.
emergency 배열을 map() 함수를 사용하여 순회하면서 각 환자의 응급도가 정렬된 sortedNum 배열에서 몇 번째로 큰 응급도인지 찾아야 한다.
map() 함수 내부에서는 indexOf() 메서드를 사용하여 sortedNum 배열에서 해당 환자의 응급도가 몇 번째로 큰 응급도인지 찾는다.
이때, indexOf() 메서드는 해당 요소가 배열에서 처음으로 나타나는 인덱스를 반환하므로, +1을 해주어 1부터 시작하는 순서로 변환.
각 환자에 대한 순서를 찾아서 새로운 배열을 생성하고, 이 배열을 반환.
예를 들어, [3, 76, 24]가 주어진 경우:
sorted 배열은 [76, 24, 3]
map() 함수를 사용하여 [3, 76, 24] 배열을 순회하면서 각 환자의 응급도를 sortedNum 배열에서 찾는다.
3은 sortedNum 배열에서 3번째로 큰 응급도이므로 결과 배열에는 3이 추가.
76은 1번째로 큰 응급도이므로 결과 배열에는 1이 추가.
24는 2번째로 큰 응급도이므로 결과 배열에는 2가 추가.
따라서 [3, 1, 2]가 반환.
function solution(emergency) {
const arr = [...emergency].sort((a, b) => b - a);
return emergency.map((v, i) => arr.indexOf(v) + 1);
}
- 다른 사람 풀이
: 맥락은 같은데 arr라는 변수명을 사용하여 정렬된 배열을 저장했으며, v와 i를 사용하여 각 환자의 응급도와 해당 환자의 인덱스를 나타냄
화살표 함수 (v, i) => arr.indexOf(v) + 1
를 사용하여 환자의 응급도와 인덱스를 더 명시적으로 다루고 있다.