알고리즘 문제풀이/백준

#1302 : 베스트셀러

모항 2022. 6. 12. 02:05

풀이방법

사용된 것:

정렬

HashMap

TreeSet

 

2022.06.12

먼저 HashMap<String, Integer> hm 을 이용해 각 책들의 판매권수를 센다.

입력으로 들어오는 책 제목들을 순서대로 하나씩 읽으면서,

처음으로 입력된 책 제목이라면 hm에 (책 제목, 1) 을 추가한다.

이전에 입력된 적 있는 책 제목이라면 hm에 (책 제목, hm.get(책 제목)+1) 을 추가한다.

이렇게 하면 마지막에는 각 책 제목에 대하여 (책 제목, 팔린 권수)가 저장되어있게 된다.

 

그 다음엔 TreeSet<String> answer를 이용하여 정답을 구한다.

int형 변수 max를 선언하고 1보다 작은 수로 초기화한다.

 

hm의 KeySet의 각 요소 str에 대하여,

hm.get(str)이 max와 같을 경우, answer에 str을 넣는다.

hm.get(str)이 max보다 클 경우, answer을 완전히 비운 뒤 str을 answer에 넣는다.

 

TreeSet은 자동으로 요소들을 오름차순 정렬하므로 가장 첫번째 요소 즉 answer.first()가 사전순으로 가장 앞이다.

따라서 answer.first()가 정답이다. 이를 화면에 출력한다.

 

코드

Java(2022.06.12)

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

public class Main {

	public static void main(String[] args) throws IOException{
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		//입력값들을 읽어오며 각 책이 팔린 권수를 세기
		int n = Integer.parseInt(br.readLine());
		HashMap<String, Integer> hm = new HashMap<String, Integer>();
		for(int i=0; i<n; i++) {
			String input = br.readLine();
			if(hm.containsKey(input)) hm.put(input, hm.get(input)+1);
			else hm.put(input, 1);
		}
		
		//정답 구하기
		int max = -1;
		TreeSet<String> answer = new TreeSet<String>();
		for(String str: hm.keySet()) {
			if(hm.get(str)>max) {
				max = hm.get(str);
				answer = new TreeSet<String>();
				answer.add(str);
			}
			else if(hm.get(str) == max) answer.add(str);
		}
		
		//정답 출력
		System.out.print(answer.first());
	}

}

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

#2217 : 로프  (0) 2022.06.12
#2309 : 일곱 난쟁이  (0) 2022.06.12
#1059 : 좋은 구간  (0) 2022.06.12
#3187 : 양치기 꿍  (0) 2022.06.09
#2370 : 시장 선거 포스터  (0) 2022.06.08