본문 바로가기

프로그래머스(Java)/Level 0

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

코드 힌트

  1. 문제 이해:
    • 주어진 emergency 배열에서 각 요소의 우선순위를 순위로 변환합니다.
    • 예를 들어, 가장 큰 값은 1등, 두 번째로 큰 값은 2등 등으로 정리합니다.
  2. 복사 및 정렬:
    • emergency 배열을 복사하여 새로운 배열을 만들고 정렬합니다.
    • 정렬된 배열을 사용하면 각 요소의 순위를 쉽게 파악할 수 있습니다.
  3. 요소 위치 찾기:
    • 원본 emergency 배열과 결과 배열의 요소 위치는 동일합니다.
    • 정렬된 배열을 활용하여 각 요소의 우선순위를 파악하고, 원본 배열의 각 요소에 맞는 순위를 결과 배열에 저장합니다.
    • 이를 위해 요소의 인덱스를 찾는 방법으로 indexOf()를 사용할 수 있습니다.
  4. 순위 매기기:
    • 정렬된 배열을 큰 값부터 순차적으로 탐색하며 각 값에 순위를 매깁니다.
    • 이 순위를 원본 배열에서의 위치에 맞춰 결과 배열에 저장합니다.

 


정답은 더보기 클릭

더보기
import java.util.*;

class Solution {
    public int[] solution(int[] emergency) {
        // 배열의 길이를 n에 저장
        int n = emergency.length;
        
        // 결과를 저장할 배열을 n 길이로 초기화
        int[] result = new int[n];
        
        // 원래 배열의 값을 리스트에 복사 (indexOf 메소드 사용을 위해)
        List<Integer> list = new ArrayList<>();
        for (int num : emergency) {
            list.add(num);
        }
        
        // 원본 배열을 복사하고 정렬하여 우선순위를 쉽게 매길 수 있게 함
        int[] sortedEmergency = Arrays.copyOf(emergency, n);
        Arrays.sort(sortedEmergency);
        
        // 우선순위 순위를 매기기 위한 변수 count 초기화
        int count = 1;
        
        // 정렬된 배열을 뒤에서부터 탐색 (큰 값부터 처리)
        for (int i = n - 1; i >= 0; i--) {
            // 현재 가장 높은 우선순위 요소를 찾음
            int target = sortedEmergency[i];
            
            // 원래 배열에서 이 요소가 어디에 위치했는지 찾아서 결과 배열에 순위를 저장
            result[list.indexOf(target)] = count++;
        }
        
        // 최종적으로 우선순위가 매겨진 결과 배열을 반환
        return result;
    }
}