문제
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 라고 계산한다.”
'Algorithm > Programmers' 카테고리의 다른 글
| [Programmers] Lv.0 | 외계행성의 나이 | Java (0) | 2025.10.24 |
|---|---|
| [Programmers] Lv.0 | 순서쌍의 개수 | Java (0) | 2025.10.22 |
| [Programmers] Lv.0 | 개미 군단 | Java (0) | 2025.10.22 |
| [Programmers] Lv.0 | 모스부호 (1) | Java (0) | 2025.10.21 |
| [Programmers] Lv.0 | 가위 바위 보 | Java (0) | 2025.10.21 |
댓글