Problem:
取引

取引先の顧客番号と取引日を月ごとに記録したデータがあります。今月のデータと先月のデータを読み込んで、先月から２ヶ月連続で取引のある会社の顧客番号と取引のあった回数を出力するプログラムを作成してください。ただし、月々の取引先数は 1,000 社以内です。

Input

今月のデータと、先月のデータが１行の空行で区切られて与えられます。それぞれのデータは以下のような形式で与えられます。

c1,d1
c2,d2
...
...

ci (1 ≤ ci ≤ 1,000) は顧客番号を表す整数、 di (1 ≤ di ≤ 31) は取引日を表す整数です。

Output

２ヶ月連続で取引のある会社について、顧客番号が小さい順に顧客番号と取引回数の総数を空白で区切って出力します。

Sample Input

123,10
56,12
34,14

123,3
56,4
123,5

Output for the Sample Input

56 2
123 3

Solution in JAVA (judge verdict: Accepted)


import java.util.*;
public class Main {

	public void doIt(){
		Scanner sc = new Scanner(System.in);
		String n = sc.nextLine();
		HashMap<Integer, Integer> lastmonth = new HashMap<Integer, Integer>();
		HashMap<Integer, Integer> thismonth = new HashMap<Integer, Integer>();
		while(!n.equals("")){
			String [] data = n.split(",");
			int num = Integer.parseInt(data[0]);
			//すでにあるのならカウント追加
			if(lastmonth.containsKey(num)){
				lastmonth.put(num, (lastmonth.get(num) + 1));
			}
			else{
				lastmonth.put(num, 1);
			}
			n = sc.nextLine();

		}
		while(sc.hasNext()){
			n = sc.nextLine();
			String [] data = n.split(",");
			int num = Integer.parseInt(data[0]);
			//すでにあるのならカウント追加
			if(thismonth.containsKey(num)){
				thismonth.put(num, (thismonth.get(num) + 1));
			}
			else{
				thismonth.put(num, 1);
			}
		}

		//比較
		ArrayList<Integer> ansList = new ArrayList<Integer>();
		for(int key: lastmonth.keySet()){
			if(thismonth.containsKey(key)){
				ansList.add(key);
			}
		}
		Collections.sort(ansList);

		//出力
		for(int anskey: ansList){
			System.out.println(anskey + " " + (lastmonth.get(anskey) + thismonth.get(anskey)));
		}

	}
	public static void main(String[] args) {
		Main obj = new Main();
		obj.doIt();

	}

}