문제
상근이는 퀴즈쇼의 PD이다. 이 퀴즈쇼의 참가자는 총 8개 문제를 푼다. 참가자는 각 문제를 풀고, 그 문제를 풀었을 때 얻는 점수는 문제를 풀기 시작한 시간부터 경과한 시간과 난이도로 결정한다. 문제를 풀지 못한 경우에는 0점을 받는다. 참가자의 총점수는 가장 높은 점수 5개의 합이다.
상근이는 잠시 여자친구와 전화 통화를 하느라 참가자의 점수를 계산하지 않고 있었다. 참가자의 8개 문제 점수가 주어졌을 때, 총점수를 구하는 프로그램을 작성하시오.
입력
8개 줄에 걸쳐서 각 문제에 대한 참가자의 점수가 주어진다. 점수는 0보다 크거나 같고, 150보다 작거나 같다. 모든 문제에 대한 점수는 서로 다르다. 입력으로 주어지는 순서대로 1번 문제, 2번 문제,... 8번 문제이다.
출력
첫째 줄에 참가자의 총점을 출력한다. 둘째 줄에는 어떤 문제가 최종 점수에 포함되는지를 공백으로 구분하여 출력한다. 출력은 문제 번호가 증가하는 순서이어야 한다.
테스트 케이스
입력 1
20
30
50
48
33
66
0
64
출력 1
261
3 4 5 6 8
입력 2
20
0
50
80
77
110
56
48
출력 2
373
3 4 5 6 7
입력 3
20
30
50
80
110
11
0
85
출력 3
355
2 3 4 5 8
접근
1.8개의 숫자를 8줄로 받습니다.
2.입력받은 숫자들 중 높은 값 5개를 합하여 출력해줍니다.
3. 높은 값 5개의 인덱스도 같이 출력해줍니다.
인덱스도 같이 출력해줘야 하므로 최댓값을 찾을 때마다,
해당 인덱스를 새로운 배열에다가 저장해주고,
해당 max값은 sum이란 변수에 따로 더해주고,
해당 최댓값은 0으로 만들어주어 다음 최댓값을 찾을 수 있게 해 줬습니다.
코드
import java.awt.desktop.SystemEventListener;
import java.io.*;
import java.math.*;
import java.util.*;
public class Main {
/*
2822 problem
*/
public static void main(String[] args) throws NumberFormatException, IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
ArrayList<Integer> list = new ArrayList<>();
int max = 0;
int sum = 0;
int save[] = new int[5];
int temp = 0;
for(int i=0; i<8; i++) {
list.add(Integer.parseInt(br.readLine()));
}
for(int j=0; j<5; j++) {
for(int i=0; i<8; i++) {
if(max < list.get(i)) {
max = list.get(i);
temp = i;
}
}
sum += max;
max = 0;
save[j] =temp+1;
list.set(temp, 0);
}
bw.write(sum+"\n");
Arrays.sort(save);
for(int i=0; i<5; i++) {
bw.write(save[i]+" ");
}
bw.flush();
br.close();
bw.close();
}
}
주의
'공부 정리 > 백준' 카테고리의 다른 글
[백준] 자바 11653 소인수분해 (0) | 2021.09.15 |
---|---|
[백준] 자바 10867 중복 빼고 정렬하기 (0) | 2021.09.14 |
[백준] 자바 11728 배열 합치기 (0) | 2021.09.10 |
[백준] 자바 1920 수 찾기 (0) | 2021.09.09 |
[백준] 자바 1789 수들의 합 (0) | 2021.09.08 |
댓글