본문 바로가기
Algorithm/Programmers

[Programmers] Lv.0 | 진료순서 정하기 | Java

by unknownomad 2025. 10. 23.

문제

https://school.programmers.co.kr/learn/courses/30/lessons/120835

 

풀이

import java.util.*;

class Solution {
    public int[] solution(int[] emergency) {
        int[] answer = new int[emergency.length]; 
        int[] sorted = emergency.clone();
        Arrays.sort(sorted);
        
        for (int i = 0; i < emergency.length; i++) {
            for (int j = 0; j < sorted.length; j++) {
                if (emergency[i] == sorted[j]) {
                    answer[i] = sorted.length - j;
                    break;
                }
            }
        }
        
        return answer;
    }
}

 

설명

int[] emergency = {3, 76, 24};

 

정렬하면 (작은 순서대로)

int[] sorted = {3, 24, 76};

 

즉,

  • 3은 제일 작음 → 제일 늦게 (3등)
  • 24는 중간 → 2등
  • 76은 제일 큼 → 1등

 

이 코드의 역할

if (emergency[i] == sorted[j]) {
    answer[i] = sorted.length - j;
    break;
}
  • 이 부분이 바로 “현재 값이 몇 등인지 계산” 하는 핵심

 

1️⃣ emergency[i] == sorted[j]

  • emergency의 i번째 값이 정렬된 배열의 j번째 값과 같으면,
    “정렬했을 때 이 값은 j번째 위치에 있다”는 뜻

예를 들어 emergency[i]가 76일 때,
sorted는 [3, 24, 76]이니까
sorted[2] == 76 → 위치 j = 2를 찾는다.

 

2️⃣ answer[i] = sorted.length - j

이제 이 값이 몇 등인지 계산해야 한다.

  • sorted.length는 배열 길이 → 여기선 3
  • j는 그 값이 정렬된 배열에서 몇 번째(0부터 시작)인지

응급도가 클수록 순위가 높아야(숫자가 작아야) 하니까,
정렬된 배열의 뒤쪽에 있을수록 (j가 클수록) 순위가 낮은 숫자가 되어야 한다.

그래서 역순으로 계산하려고 이렇게 계산한 것이다.

정렬 후 위치 j 순위 (3 - j)
3 0 3등
24 1 2등
76 2 1등
  • 즉, answer[i] = sorted.length - j 가 순위를 뒤집는 공식

 

3️⃣ break;

같은 값을 찾았으면 더 볼 필요 없으니까 반복문을 멈춘다.

 

✅ 최종적으로 

i emergency[i]  sorted[j] j 순위 (3 - j) answer[i]
0 3 3 0 3 3
1 76 76 2 1 1
2 24 24 1 2 2
  • 👉 answer = [3, 1, 2]

 

💡한줄 요약

 

“정렬된 배열에서의 위치(j)를 이용해 뒤에서부터 등수를 매기기 위해
answer[i] = sorted.length - j 라고 계산한다.”

 

댓글