Problem:
未提出者は誰だ

問題

JOI大学のM教授はプログラミングの授業を担当している．クラスには30人の受講生がいて各受講生には1番から30番までの出席番号がふられている．この授業の課題を28人の学生が提出した．提出した28人の出席番号から提出していない2人の出席番号を求めるプログラムを作成せよ．

入力

入力は28行あり，各行には提出者の出席番号（1以上30以下）が1つずつ書かれている．入力される出席番号に重複はないが，どのような順に入力されるかはわからない．

出力

出力は2行からなる． 1行目に2人の未提出者の出席番号のうち小さいほうを， 2行目に大きいほうを出力せよ．

入出力例

入力例 1

3
1
4
5
7
9
6
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

出力例 1

2
8

入力例 2

9
30
6
12
10
20
21
11
7
5
28
4
18
29
17
19
27
13
16
26
14
23
22
15
3
1
24
25

出力例 2

2
8

上記問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。

Solution in JAVA (judge verdict: Accepted)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;

public class Main {

	public static void main(String[] args) throws IOException {

		BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
		HashMap<Integer, Integer> hmNbrs = new HashMap<Integer, Integer>();
		ArrayList<Integer> alNotAddNbrs = new ArrayList<Integer>();

		//get
		for(int i = 0; i < 28; i++) {
			hmNbrs.put(Integer.parseInt(bufferedReader.readLine()), 1);
		}

		//pull
		for(int i = 0; i < 30; i++) {
			if(hmNbrs.get(i + 1) == null) alNotAddNbrs.add(i + 1);
		}

		//sort
		int[] arrResult = new int[alNotAddNbrs.size()];

		if(alNotAddNbrs.get(0) < alNotAddNbrs.get(1)) {
			arrResult[0] = alNotAddNbrs.get(0);
			arrResult[1] = alNotAddNbrs.get(1);
		} else {
			arrResult[1] = alNotAddNbrs.get(0);
			arrResult[0] = alNotAddNbrs.get(1);
		}

		for(int i = 0; i < arrResult.length; i++) System.out.println(arrResult[i]);
	}






}