[프로그래머스] 진료순서 정하기

이아현·2023년 6월 3일
0

코딩테스트

목록 보기
9/31
post-thumbnail

✅ 문제 설명

외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 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을 만들어줬다.
  • 그리고 emergencysort_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연산자를 쓰니 깊은 복사가 되어 emergencysort_arr은 같지 않은 배열이 되었다.
  • 그랬더니 결과는 통과!!

📃 다른 풀이

function solution(emergency) {
    const rank = [...emergency];
    rank.sort((a, b) => b - a);
    return emergency.map(n => rank.indexOf(n) + 1);
}
  • 내 코드가 너무 긴 듯 하여 다른 사람들의 코드도 찾아봤는데, 매우 가독성 좋으면서 간결한 코드가 있었다.
  1. 깊은 복사를 통해 emergency배열을 복사한 후에 내림차순으로 정렬한다.
  2. map메서드를 통해 배열의 각 요소에 대하여 rank의 인덱스에 + 1 하여 새로운 배열을 반환한다.
  • 메서드를 사용하니 확실히 코드가 간결해졌다.
  • 많이 써보면서 체득하자!!!
profile
PM을 지향하는 FE 개발자 이아현입니다 :)

0개의 댓글