개발 공부/코딩테스트 연습

[프로그래머스 입문][자바] 진료순서 정하기

빵다희 2024. 10. 20. 21:52

❓문제설명

진료순서 정하기

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

비슷한 문제를 여럿풀었지만 자꾸 방법을 까먹길래, 입문레벨이지만 기억하기 위해서 글을 작성한다.


🔍문제해석

어떤걸 풀어야 할까?

  • 응급도가 적힌 배열이 주어지면 각 응급도에 따라 진료받을 수 있는 순위를 배열로 나타내라. 큰  수 일수록 우선순위가 높다.
  • 단, 진료받을 수 있는 순위는 배열에서 응급도가 위치한 인덱스와 동일한 인덱스에 배치되어야한다.
  • 예시
emergency result
[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]

 


🧐문제풀이

  • 문제 풀이 구상

주어진 인덱스와 응급도를 필드로 가지고 있는 클래스로 만들어 내림차수으로 정렬한 다음

객체가 갖고 있는 원래의 위치(index)에 정렬된 순서를 대입한다.

  • 알고리즘 선택

ComparaTo를 이용한 내림차순 정렬


!제출코드

  1. 필드로 위치(idx)와 응급도 값(value)을 갖는 클래스를 작성한다.
  2. Comparable 인터페이스를 구현받아 value 값으로 내림차순 정렬할 수 있도록 ComparTo를 작성한다.
  3. Emergency클래스를 담는 배열을 만들어, 주어진 응급도 배열로 인스턴스 생성을 한 다음 넣어준다. 그때 i는 배열 내 위치이고, value는 응급도 값이다.
  4. Arrays.sort로 배열을 정렬한다. 클래스에 작성되어있는 CompareTo에 따라 value의 값으로 내림차순 정렬하게 된다.
  5. for문을 이용해 배열을 탐색한다. (i+1)는 진료 순서이고, indexList[i].idx는 기존의 순서이다.
  6. answer[기존순서] = 진료순서 대입한다.
import java.util.*;

class Solution {
        public static int[] solution(int[] emergency) {

          Emergency[] indexList = new Emergency[emergency.length];
        
        // (3)
          for (int i = 0; i < emergency.length; i++) {
              indexList[i] = new Emergency(i,emergency[i]);
          }
        // (4)
          Arrays.sort(indexList);
        
          int[] answer = new int[emergency.length];
          // (5)
          for (int i = 0; i < indexList.length; i++) {
             // (6)
              int idx = indexList[i].idx;
              answer[idx] = i + 1;
          }
        
          return answer;
      }
      // (1)
        static class  Emergency implements Comparable<Emergency> {
          int idx;
          int value;

          public Emergency(int idx, int value) {
              this.idx = idx;
              this.value = value;
          
          // (2)
          @Override
          public int compareTo(Emergency o) {
              return o.value - this.value;
          }
     }
}
728x90
반응형