백준 1302번: 베스트셀러 [정렬][Map] -Java :: 매운코딩
728x90
300x250

https://www.acmicpc.net/problem/1302

 

1302번: 베스트셀러

첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고

www.acmicpc.net

728x90

해시맵을 사용하면 뚝딱이다.

 

<Java코드>

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		//System.setIn(new FileInputStream("Test.txt"));
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		int N = Integer.parseInt(st.nextToken());
		
		HashMap<String,Integer> map =new HashMap<String,Integer>();
		
		for (int tc = 0; tc < N; tc++) {
			st = new StringTokenizer(br.readLine());
			String book = st.nextToken();
			
			if(map.containsKey(book))
				map.put(book, map.get(book)+1);
			else 
				map.put(book, 1);
			
		}
		
		ArrayList<String> keySet = new ArrayList<String>(map.keySet());
		
		Collections.sort(keySet, new Comparator() {
			
			@Override
			public int compare(Object s1, Object s2) {
				if(map.get(s1) > map.get(s2))
					return -1;
				else if(map.get(s1) == map.get(s2))
					return s1.toString().compareTo(s2.toString());
				else
					return 1;
			}

		});
		
		System.out.println(keySet.get(0));

	}

}

 

 

이 문제의 핵심코드는 ArrayList로 keyset() 받은 다음  value에 따라 key 정렬하는 것.

List통해 HashMap 정렬하기 완료우...,,,,

ArrayList<String> keySet = new ArrayList<String>(map.keySet());
		
		Collections.sort(keySet, new Comparator() {
728x90

+ Recent posts