문제설명

 

소스코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Set;

public class Main
{
	public static void main(String[] args) throws Exception
	{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		HashMap <String, Integer> map = new HashMap<>();
		ArrayList <String> list = new ArrayList<>();
		int N = Integer.parseInt(br.readLine());
		int maxNumber = 0;
		for(int i = 0; i < N; ++i)
		{
			String str = br.readLine();
			if(map.containsKey(str)) //해시맵에 이미 해당 키가 있다면
			{
				int tmp = map.get(str);
				map.remove(str); //기존 맵을 제거
				map.put(str, ++tmp); // 기존 키에 값이 1 추가된 맵을 추가
				maxNumber = Math.max(maxNumber, tmp); //최대값 비교
			}
			else
			{
				map.put(str, 1);
				maxNumber = Math.max(maxNumber, 1); //최대값 비교
			}
		}
		Set<Entry<String, Integer>> entrySet = map.entrySet(); //엔트리 셋을 가져오는 Set 생성
		Iterator<Entry<String, Integer>> entryIterator = entrySet.iterator(); //엔트리 셋을 반복하는 반복자 생성
		while (entryIterator.hasNext()) {
			Entry<String, Integer> entry = entryIterator.next();
			int v = entry.getValue();
			if(v == maxNumber) list.add(entry.getKey()); //최대 값이라면 리스트에 해당 키를 추가
		}
		Collections.sort(list); //리스트 정렬
		System.out.println(list.get(0)); //정렬된 리스트중 가장 맨 앞(사전순) 출력
	}
}