문제
해결 방안 고민
•
가장 높은 점수 5개의 합을 구한다 → 5개 수의 합을 구해야 한다.
•
가장 높은 점수 5개에 해당하는 인덱스를 출력해야 한다.
해결 방법
•
입력받은 8개의 숫자들로 배열을 생성하였다.
•
copyOfRange 를 활용하여 생성한 배열을 복사하여 rank 배열을 생성하였다.
•
rank 배열을 정렬하여 가장 높은 점수 5개의 합을 구했다.
•
기존 배열과 rank 배열의 특정 구간(rank[7] ~ rank[3]) 까지를 비교하여 배열 요소가 일치할 경우 인덱스에 1을 더하여 출력할 수 있는 로직을 구성하였다.
코드
package algo250401;
import java.io.*;
import java.util.Arrays;
// 백준 - 점수 계산 (실버 5)
// 참가자의 총 점수는 가장 높은 점수 5개의 합
// 20 30 50 48 33 66 0 64
public class Baek2822 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int[] arr = new int[8];
int length = arr.length;
for (int i = 0; i < length; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
// 랭킹 배열 생성
int[] rank = Arrays.copyOfRange(arr, 0, 8);
// 랭킹 배열 정렬
Arrays.sort(rank);
int sum = rank[7] + rank[6] + rank[5] + rank[4] + rank[3];
bw.write(String.valueOf(sum));
bw.newLine();
for (int i = 0; i < length; i++) {
for (int j = length - 1; j >= 3; j--) {
if (arr[i] == rank[j]) {
bw.write(i + 1 + " ");
}
}
}
bw.flush();
bw.close();
br.close();
}
}
Java
복사