(프로그래머) Lv0.치료 순서 설정

문제 설명

외과의사들은 응급실에 오는 환자의 긴급성에 따라 치료 순서를 정하려고 한다. 긴급도의 정수배열이 인자로 주어지면 처리순서가 긴급도의 오름차순으로 결정된 배열을 반환하는 솔루션 함수가 완성된다.

한도

  • 반복되는 요소가 없습니다.
  • 1≤ 비상 기간 ≤ 10
  • 1≤ 비상 요소 ≤ 100

입력/출력 예제

긴급 상황 결과
(3, 76, 24) (3, 1, 2)
(1, 2, 3, 4, 5, 6, 7) (7, 6, 5, 4, 3, 2, 1)
(30, 10, 23, 6, 100) (2, 4, 3, 5, 1)

두두의 솔루션

배열이 내림차순으로 정렬된 후 요소의 인덱스 값을 찾아 조정하는 논리는 맞지만 테스트는 실패합니다. 결과는 코드가 한 줄씩 실행되는 것입니다. 문제는 어디에 있습니까? 원래 배열) 자체가 변경된 이유입니다.

그래서 원래 배열을 건드리지 않기 위해 스프레드 연산자를 이용해서 재배열해서 비교해봤습니다!

function solution(emergency) { //(3,76,24)
    let sortedArr=(...emergency).sort((a,b)=>b-a); //(76,24,3)
    for(let i=0;i<emergency.length;i++){
        for(let j=0;j<sortedArr.length;j++){
            if(emergency(i)===sortedArr(j)){
                emergency(i)=j+1;
                break;
            }
            continue;
        }
    }
    return emergency;
}

남의 솔루션

훨씬 간단하고 참신해 보이는 map이나 double for 문을 사용하여 배열을 다시 만드는 방법을 생각할 수 없습니다.

const solution = (emergency) => {
    const sorted = (...emergency).sort((a, b) => b - a)
    return emergency.map(el => sorted.indexOf(el) + 1)
}

⊕ 추가 지식++

js array.sort()는 원래 배열을 변경합니다!

// 원본인 arr 이 정렬됨
{
  const arr = (1, 2, 3);
  const sortedArr = arr.sort((a, b) => b - a);
  console.log(arr === sortedArr); // true
}

// 원본인 arr를 살리면서 정렬된 새 배열 얻기
{
  const arr = (1, 2, 3);
  const sortedArr = (...arr).sort((a, b) => b - a);
  console.log(arr === sortedArr); // false
}