본문 바로가기

Coding Test/Programmers

[프로그래머스/JavaScript] 코딩 테스트 풀이 (문제 66 - 진료 순서 정하기)

728x90
# 문제

외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 emergency가 매개변수로 주어질 때 응급도가 높은 순서대로 진료 순서를 정한 배열을 return하도록 solution 함수를 완성해주세요.



# 답안

// 1. 입력: emergency => 정수 배열 [1,2,3] 같은거
// 2. 출력: 응급도 높은 순서대로 진료 순서 정한 배열 => [3,2,1] 같은거
// emergeny 복사본을 만든다.
// 복사본 만든거를 오름차순으로 정렬한다.
// emergeny에 map 돌리면서 각 요소가 temp에서 몇번째에 속하는지를 반환하는 배열을 만든다.  


function solution(emergency) {
    const temp = [...emergency].sort((a,b)=>b-a)
    return emergency.map(v=>temp.indexOf(v)+1)
}



# 인사이트

// indexOf() 메서드는 배열에서 지정된 요소를 찾고, 그 요소의 첫 번째 인덱스를 반환, 만약 배열에 해당 요소가 없으면 -1을 반환
// const array = [10, 20, 30, 40, 50]; 
// console.log(array.indexOf(30)); // 출력: 2

 

 

 emergency.map(v=>temp.indexOf(v)+1) 

emergency = [3, 76, 24]

temp[76, 24, 3]

  • v가 3일 때, temp.indexOf(3)을 통해 3의 인덱스인 2를 반환하고, 여기에 1을 더하여 결과는 3이 된다. // [3] 
    (숫자 3은 오름차순으로 정렬한 것 기준으로 인덱스가 2야! 근데 순서는 1부터 시작해야하니까 +1 해야해!)
  • v가 76일 때, temp.indexOf(76)을 통해 76의 인덱스인 0을 반환하고, 여기에 1을 더하여 결과는 1이 된다. // [3, 1]
  • v가 24일 때, temp.indexOf(24)을 통해 24의 인덱스인 1을 반환하고, 여기에 1을 더하여 결과는 2가 된다. // [3, 1, 2]

따라서 함수의 결과는 [3, 1, 2]가 된다.

728x90