https://www.acmicpc.net/problem/2822
알고리즘 분류
- 정렬
풀이
먼저 Node라는 인덱스와 점수를 담은 내부 클래스를 생성하였다.
public static class Node{
private int index;
private int score;
public Node(int index, int score) {
this.index = index;
this.score = score;
}
}
그리고 Node 클래스형 1차원 배열을 만든 후
객체를 생성하며 배열에 하나씩 담았다.
for (int i = 0; i < nodes.length; i++) {
score = Integer.parseInt(br.readLine());
node = new Node(i+1, score);
nodes[i] = node;
} // for
객체 score기준으로 내림차순으로 정렬 후
배열을 하나 더 생성해 5등까지 배열 복사를 진행했다.
그리고 복사한 배열을 또 다시 index 기준으로 오름차순으로 정렬했다.
Arrays.sort(nodes, (o1, o2) -> o2.score - o1.score);
Node [] nodes2 = Arrays.copyOfRange(nodes,0,5);
Arrays.sort(nodes2, (o1, o2) -> o1.index - o2.index);
아래는 전체 정답 코드이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class b_2822 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Node [] nodes = new Node [8];
int score;
Node node;
for (int i = 0; i < nodes.length; i++) {
score = Integer.parseInt(br.readLine());
node = new Node(i+1, score);
nodes[i] = node;
} // for
Arrays.sort(nodes, (o1, o2) -> o2.score - o1.score);
Node [] nodes2 = Arrays.copyOfRange(nodes,0,5);
Arrays.sort(nodes2, (o1, o2) -> o1.index - o2.index);
StringBuilder sb = new StringBuilder();
int sum = 0;
for (int i = 0; i < 5; i++) {
sum += nodes2[i].score;
sb.append(nodes2[i].index).append(" ");
}
sb.substring(0, sb.length()-1);
System.out.println(sum);
System.out.println(sb.toString());
} // main
public static class Node{
private int index;
private int score;
public Node(int index, int score) {
this.index = index;
this.score = score;
}
}
}
New Code
'BOJ, Programmers' 카테고리의 다른 글
[Java] 백준 1926 (그림) 자바 문제 풀이 (0) | 2024.04.05 |
---|---|
[Java] 프로그래머스 (이중우선 순위 큐 ) (0) | 2024.04.05 |
[JAVA] 백준 1041 (주사위) (0) | 2024.04.05 |
[Java] 백준 1500 (최대곱) (0) | 2024.04.03 |
[Java] 백준 1010번 (다리놓기) (0) | 2024.03.30 |