728x90
🔗 문제 링크
https://www.acmicpc.net/problem/2822
📌 문제 개요
8개의 점수가 주어질 때,
가장 높은 점수 5개의 합과 해당 점수들의 문제 번호를 출력하는 문제
단, 문제 번호는 오름차순으로 출력해야 한다.
📌 접근 방법
- 점수만 정렬하면 문제 번호를 잃어버리기 때문에 (점수, 번호) 형태로 함께 저장
- 점수 기준으로 내림차순 정렬 후 상위 5개를 선택한다.
- 선택된 문제 번호는 따로 배열에 저장 후 오름차순 정렬하여 출력한다.
📌 핵심 아이디어
- 정렬 기준이 2개 존재한다.
1. 점수 기준 → 내림차순
2. 번호 기준 → 오름차순
따라서 한 번에 처리하지 않고
선택 → 재정렬 구조로 해결
📌 전체 코드
package no_2822;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class No2822 {
static class Score {
int value;
int index;
public Score(int value, int index){
this.value = value;
this.index = index;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Score[] arr = new Score[8];
for(int i = 0; i < 8; i++){
arr[i] = new Score(Integer.parseInt(br.readLine()), i + 1);
}
// 점수 기준 내림차순 정렬
Arrays.sort(arr, (a, b) -> Integer.compare(b.value, a.value));
int sum = 0;
int[] selected = new int[5];
// 상위 5개 선택
for(int i = 0; i < 5; i++){
sum += arr[i].value;
selected[i] = arr[i].index;
}
// 번호 오름차순 정렬
Arrays.sort(selected);
StringBuilder sb = new StringBuilder();
for(int num : selected){
sb.append(num).append(" ");
}
System.out.println(sum);
System.out.println(sb);
}
}
🧾 정리
- 객체 배열을 활용해 (점수, 번호)를 함께 관리
- Comparator를 이용한 정렬 방식 이해가 중요
- 서로 다른 정렬 기준이 있을 경우 → 분리해서 처리
728x90
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
| 백준 9093 단어 뒤집기 JAVA 풀이 (문자열, 구현, 시간복잡도) (0) | 2026.03.22 |
|---|---|
| 백준 1924 2007년 JAVA 풀이 (구현, 시간복잡도) (0) | 2026.03.21 |
| [백준] 10867번 : 중복 빼고 정렬하기 (JAVA) (0) | 2026.03.19 |
| [백준] 2161번 : 카드1 (JAVA) (0) | 2026.03.18 |
| [백준] 2740번 : 행렬 곱셈 (JAVA) (0) | 2026.03.17 |