문제설명
김형택은 탑문고의 직원이다. 김형택은 계산대에서 계산을 하는 직원이다. 김형택은 그날 근무가 끝난 후에, 오늘 판매한 책의 제목을 보면서 가장 많이 팔린 책의 제목을 칠판에 써놓는 일도 같이 하고 있다.
오늘 하루 동안 팔린 책의 제목이 입력으로 들어왔을 때, 가장 많이 팔린 책의 제목을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고, 알파벳 소문자로만 이루어져 있다.
입출력 예
출력
첫째 줄에 가장 많이 팔린 책의 제목을 출력한다. 만약 가장 많이 팔린 책이 여러 개일 경우에는 사전 순으로 가장 앞서는 제목을 출력한다.
풀이
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception{
//get data
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
//save into Treemap for sort (by key)
Map<String,Integer> map = new TreeMap<>();
String title = "";
for(int i=0;i<num;i++){
title = br.readLine();
if(map.containsKey(title)){
map.put(title, map.get(title)+1);
}else{
map.put(title,1);
}
}
//find max sell count
int maxCount = 0;
for(String best : map.keySet()){
maxCount = Math.max(maxCount, map.get(best));
}
//find bestseller title which has the same number as maxCount
for(String bestSeller : map.keySet()){
if(map.get(bestSeller)==maxCount){
System.out.println(bestSeller);
break;
}
}
}
}
먼저, BufferedReader와 InputStreamReader를 이용해서 주어진 입력 값을 받아온다.
그리고 첫 번째 라인이 도서의 개수라고 했으므로 읽어온 br을 int 값으로 변환시킨다.
그리고 Map에 하나씩 저장해주면 되는데, 나는 HashMap이 아닌 TreeMap을 썼다.
왜냐하면, TreeMap은 데이터 저장시에 Key 값을 기준으로 오름차순 정렬을 자동으로 해주기 때문이다 (그 때문에 내부 동작 시간이 조금 더 걸린다는 단점이 있기는 하다.) 해당 책 제목의 데이터가 맵에 있다면 기존값에 +1, 아니라면 새로 추가해주었다.
가장 많이 팔린 책의 개수를 알아내기 위해 Math.max(int a, int b)
함수를 활용해서 최대값을 알아냈다.
- 매개변수 a, b 중 더 큰 값을 리턴해주는 함수이다.
public static int max(int a, int b) {
return (a >= b) ? a : b;
}
마지막으로, 해당 maxCount 와 일치하는 key값을 찾아 출력해서 완성했다.
백준에서는 다른 코테 사이트와 다르게 메서드를 제공하지 않는다. (당연히 매개변수도 알아서..) 그래서 다 작성하고서도 컴파일 에러가 자꾸 떴다. 알아보니 백준은 클래스 이름을 Main으로 하고 메인 함수 안에 로직을 작성해서 제출하는 방식을 사용하는 듯 하다. 테스트 방식이 타 사이트와 달라서 살짝 어색했다. 메서드 매개변수가 아니라 BufferedReader 를 이용해서 한 줄 씩 읽어내는 것도 엄청 오랜만에 써본듯... 오늘도 많은 것을 배운 하루 😉
'코딩테스트' 카테고리의 다른 글
[LeetCode] 1. Two Sum - Python (0) | 2021.03.31 |
---|---|
[LeetCode] 860. Lemonade Change - Python (0) | 2021.03.30 |
[LeetCode] 21. Merge Two Sorted Lists (0) | 2021.03.25 |
[Programmers] 오픈채팅방 (0) | 2021.03.24 |
[Programmers] 카펫 (0) | 2021.03.24 |