외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 emergency가 매개변수로 주어질 때 응급도가 높은 순서대로 진료 순서를 정한 배열을 return하도록 solution 함수를 완성해주세요.
1 ≤ emergency의 길이 ≤ 10
1 ≤ emergency의 원소 ≤ 100
function solution(emergency) {
var answer = [];
var sort_arr = emergency.sort((a, b) => b - a);
var idx_arr = [];
for (let i = 0; i < sort_arr.length; i++) {
idx_arr.push(i + 1);
}
for (let i = 0; i < emergency.length; i++) {
for (let j = 0; j < sort_arr.length; j++) {
if (emergency[i] === sort_arr[j]) {
answer.push(idx_arr[j]);
}
}
}
return answer;
}
console.log(solution([3, 76, 24]));
emergency
를 정렬한 sort_arr
을 만들어주고idx_arr
을 만들어줬다.emergency
와 sort_arr
을 비교하면서 같으면 idx_arr
의 값을 넣는 방식으로 구현했다.answer
의 값이 계속 1, 2, 3, 4,,, 이런 식으로 정렬이 되어서 나왔다.emergency
를 얕은 복사해주었기 때문이었다.function solution(emergency) {
var answer = [];
// 내림차순 정렬
var sort_arr = [...emergency].sort((a,b)=> (b-a))
// var sort_arr = emergency.sort(function(a,b){return a-b})
// 순위를 담을 배열 : idx_arr
var idx_arr = [];
for (let i=0; i<sort_arr.length; i++) {
idx_arr.push(i+1)
}
for (let i=0; i<emergency.length; i++){
for (let j=0; j<sort_arr.length; j++) {
if(emergency[i] === sort_arr[j]) {
answer.push(idx_arr[j])
}
}
}
return answer;
}
sort
메서드를 쓰면서 emergency
원본 배열까지 내림차순으로 정렬되고 있었다.spread
연산자를 쓰니 깊은 복사가 되어 emergency
와 sort_arr
은 같지 않은 배열이 되었다. function solution(emergency) {
const rank = [...emergency];
rank.sort((a, b) => b - a);
return emergency.map(n => rank.indexOf(n) + 1);
}
emergency
배열을 복사한 후에 내림차순으로 정렬한다.map
메서드를 통해 배열의 각 요소에 대하여 rank
의 인덱스에 + 1 하여 새로운 배열을 반환한다.