白駿Baekjoon計算2822点-JAVA


https://www.acmicpc.net/problem/2822
質問する
尚根は知識コンテスト番組の監督だ.この知能コンテストの参加者は全部で8つの問題に答えなければならない.参加者は各問題に答え,問題を解く際に得られる点数は問題を解く時間と難易度によって決まる.答えがなければ、0点を取らなければなりません.参加者の総得点は最高の5つの点数の和です.
尚根はしばらく彼女と電話をし、参加者の点数を計算しなかった.参加者の8問に採点する場合は、総点を求めるプログラムを作成してください.
入力
各問題は8行あり,参加者に点数をつける.スコアは0以上、150未満です.すべての問題の点数が違います.1問2問を入力順に出します...8番目の問題
しゅつりょく
参加者の合計スコアを最初の行に出力します.2行目は、最終スコアに含まれる問題をスペースで区切って出力します.出力は問題番号が増加する順序であるべきである.
入力例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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.TreeMap;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		TreeMap<Integer, String> map = new TreeMap<>();

		for (int i = 0; i < 8; i++) {
			map.put(Integer.parseInt(br.readLine()), (i + 1) + "");
		}

		int sum = 0;
		String str[] = new String[5];
		int w = 0;

		for (Integer key : map.descendingMap().keySet()) {
			sum += key;
			str[w] = map.get(key);

			if (w == 4)
				break;
			w++;
		}
		Arrays.sort(str);
		System.out.println(sum);
		for (int i = 0; i < str.length; i++) {
			System.out.print(str[i]);
			if (i != str.length - 1)
				System.out.print(" ");
		}
	}
}
  • 説明
  • コアは、点数と問題番号をどのように持っていくか、treemapを使用しています.