코딩테스트 연습 기록

이종길·2022년 1월 8일
0

코딩테스트 연습

목록 보기
42/128

2022.01.08 18일차

백준 1302번 (베스트셀러)

문제

김형택은 탑문고의 직원이다. 김형택은 계산대에서 계산을 하는 직원이다. 김형택은 그날 근무가 끝난 후에, 오늘 판매한 책의 제목을 보면서 가장 많이 팔린 책의 제목을 칠판에 써놓는 일도 같이 하고 있다.

오늘 하루 동안 팔린 책의 제목이 입력으로 들어왔을 때, 가장 많이 팔린 책의 제목을 출력하는 프로그램을 작성하시오.

나의 풀이

  1. 책의 개수 N < 1000, 책 제목 길이 < 50, 소문자
  2. 가장 많이 입력된 책, 여러 개일 경우 사전 순
  3. HashMap 사용, 키 - 제목, 값 - 개수
  4. HashMap에서 제목에 해당하는 키 존재하지 않으면 키랑 값(1) 추가
  5. 존재하면 replace 활용해서 해당하는 키에 값 1 추가
  6. 값 비교하면서 max값 설정
  7. 키 값 sort 활용해서 오름차순으로 정렬(HashMap -> ArrayList)
  8. ArrayList 내 정렬된 키에서 max랑 먼저 일치하는 값 출력
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int n = scanner.nextInt();


        HashMap<String, Integer> hm = new HashMap<>();
        for (int i = 0; i < n; i++) {
            String title = scanner.next();

            if (!hm.containsKey(title)) {
                hm.put(title, 1);
            } else {
                hm.replace(title, hm.get(title) + 1);
            }
        }

        int max = Integer.MIN_VALUE;
        for (String key : hm.keySet()) {
            if (max < hm.get(key)) {
                max = hm.get(key);
            }
        }

        ArrayList<String> al = new ArrayList<>(hm.keySet());
        Collections.sort(al);

        for (String key : al) {
            if (hm.get(key) == max) {
                System.out.println(key);
                break;
            }
        }
        
    }
}

생각하기

profile
Go High

0개의 댓글

관련 채용 정보