Lv.0 - 진료순서 정하기_01.01🥲

송철진·2023년 1월 1일
0

나의 코드

function solution(emergency) {
    let obj = {}
    let result = []
    for(let i in emergency){
        obj[emergency[i]] = Number(i)
    }
    emergency.sort((a,b)=>b-a)
    for(let j in emergency){
        result[obj[emergency[j]]] = Number(j)+1   
    }
    return result
} 

풀이

개인적으로 여태까지 푼 문제 중에 가장 어려웠다
최대값 순서를 숫자로 부여해야하는데 sort()를 쓰면 emergency의 원래 순서를 알수가 없다. 그래서 원래 순서 index를 저장할 수 있게 객체를 선언해서 할당했다.

  1. emergency를 순회하여 = emergency의 값, = emergency의 index로 하는 객체 obj를 생성한다.
    👉 obj = emergency의 원본
let obj = {}
for(let i in emergency){
    obj[emergency[i]] = Number(i)
}

// emergency = [3, 76, 24]
// obj = {"3":0, "76":1, "24":2}
  1. emergency를 내림차순으로 정렬
emergency.sort((a,b)=>b-a)

// emergency = [76, 24, 3]
  1. 내림차순으로 정렬된 emergency의 첫번째 값부터 우선순위를 부여하되,
    빈 배열 result에 emergency의 요소를 obj의 키로 접근한 obj의 값을 result의 index로 하여 result의 index에 해당하는 값에 우선순위를 넣는다
    (어렵다..)
for(let j in emergency){
    result[obj[emergency[j]]] = Number(j)+1   
}
// j = 0 이면 Number(j)+1 = 1을 할당한다
// emergency[j] = emergency[0] = 76 이고
// > obj[emergency[j]] = obj[76] = 1 이고
// >> result[obj[emergency[j]]] = result[1] 에 1을 할당한다
// >>> result = [,1]

// j = 1 이면 Number(j)+1 = 2를 할당한다
// emergency[j] = emergency[1] = 24 이고
// > obj[emergency[j]] = obj[24] = 2 이고
// >> result[obj[emergency[j]]] = result[2] 에 2을 할당한다
// >>> result = [,1,2]

// j = 2 이면 Number(j)+1 = 3을 할당한다
// emergency[j] = emergency[2] = 3 이고
// > obj[emergency[j]] = obj[3] = 0 이고
// >> result[obj[emergency[j]]] = result[0] 에 3을 할당한다
// >>> result = [3,1,2]
profile
검색하고 기록하며 학습하는 백엔드 개발자

0개의 댓글