코딩테스트/BOJ

[BOJ] 1302 베스트셀러 - JAVA

5월._. 2022. 6. 25.
728x90

1. 문제

 

1302번: 베스트셀러

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

www.acmicpc.net

김형택은 탑문고의 직원이다. 김형택은 계산대에서 계산을 하는 직원이다. 김형택은 그날 근무가 끝난 후에, 오늘 판매한 책의 제목을 보면서 가장 많이 팔린 책의 제목을 칠판에 써놓는 일도 같이 하고 있다.
오늘 하루 동안 팔린 책의 제목이 입력으로 들어왔을 때, 가장 많이 팔린 책의 제목을 출력하는 프로그램을 작성하시오.


2. 풀이

1.  출력할 책은 result변수에 담는다. 카운트는 max에 저장한다.

2.  임시 카운트와 책 이름은 title, cnt에 저장한다.

3.  책 이름을 하나씩 입력받는다. getOrDefault를 이용해서 키가 title인 값이 있다면 그 값을, 없다면 0을 불러와서 +1한 뒤 cnt에 저장한다.

4.  cnt 값을 map에 put한다.

5.  만약 max값이 cnt보다 작거나, max==cnt면서 사전순으로 현재 title이 result보다 앞선다면 max값과 result를 바꾼다.

6.  result를 출력한다.

import java.io.*;
import java.util.*;

public class BOJ_1302_베스트셀러 {
   public static void main(String[] args) throws IOException {
      BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
      int N = Integer.parseInt(in.readLine());
      Map<String,Integer> map = new HashMap<>();
      String title;
      int cnt;
      int max=0;
      String result="";
      for(int i=0;i<N;i++){
         title = in.readLine();
         cnt = map.getOrDefault(title,0)+1;
         map.put(title,cnt);
         if(max<cnt || (max==cnt && result.compareTo(title)>0)) {
            max = cnt;
            result = title;
         }
      }
      System.out.println(result);
   }
}

3. 결과

개수가 같으면 사전순인걸 잊고 제출했다가 틀렸다.

'코딩테스트 > BOJ' 카테고리의 다른 글

[BOJ] 1251 단어 나누기 - JAVA  (0) 2022.07.01
[BOJ] 2217 로프 - JAVA  (0) 2022.06.30
[BOJ] 1269 대칭 차집합 - JAVA  (0) 2022.06.24
[BOJ] 1141 접두사 - JAVA  (0) 2022.06.23
[BOJ] 1059 좋은 구간 - JAVA  (0) 2022.06.22

댓글