-
1302번: 베스트셀러
첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고
www.acmicpc.net
문제
김형택은 탑문고의 직원이다. 김형택은 계산대에서 계산을 하는 직원이다. 김형택은 그날 근무가 끝난 후에, 오늘 판매한 책의 제목을 보면서 가장 많이 팔린 책의 제목을 칠판에 써놓는 일도 같이 하고 있다.
오늘 하루 동안 팔린 책의 제목이 입력으로 들어왔을 때, 가장 많이 팔린 책의 제목을 출력하는 프로그램을 작성하시오.
조건
[입력]
첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고, 알파벳 소문자로만 이루어져 있다.
[출력]
첫째 줄에 가장 많이 팔린 책의 제목을 출력한다. 만약 가장 많이 팔린 책이 여러 개일 경우에는 사전 순으로 가장 앞서는 제목을 출력한다.
풀이
해당 문제는 가장 많이 팔린 책을 구하는 문제다 다만 여러 개라면 사전 순으로 젤 앞에 오는 책을 리턴하면 된다.
먼저 treemap을 이용하면 자동으로 키값으로 정렬을 해주기 때문에 사전 순 정렬이 완료되고 이후 map에 값일 넣어줄 때 기존에 있는지 없는지 체크해서 +1 한 값을 넣어준다. 이후 정렬을 위해 map를 list로 변환하고 람다식으로 내림차순 정렬을 한 뒤 리스트에 0번째 값의 키값을 리턴하면 해결 가능하다.
코드
import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.TreeMap; public class Main { public static void main(String[] args) throws Exception{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); Map<String, Integer> map = new TreeMap<>(); // treemap는 자동으로 키값으로 정렬해줌 (사전순 정렬) for (int i = 0; i < N; i++) { String str = br.readLine(); map.put(str, map.getOrDefault(str, 0)+1); // 해당 값이 있으면 가져온값 +1 없으면 0+1한값을 넣어줌 } List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet()); // map를 정렬하기위해 list로 변환 list.sort(Map.Entry.comparingByValue((a,b) -> b - a)); // 벨류를 내림차순으로 람다식 정렬 System.out.println(list.get(0).getKey()); // 첫번째 값의 키를 출력 } }
GitHub - JUNGSOONIL/Algorithm-JAVA: 알고리즘 문제 해결 자바 소스 코드
알고리즘 문제 해결 자바 소스 코드. Contribute to JUNGSOONIL/Algorithm-JAVA development by creating an account on GitHub.
github.com
728x90'알고리즘 > Baekjoon' 카테고리의 다른 글
Baekjoon 13913 숨바꼭질 4 JAVA (0) 2022.06.06 Baekjoon 17086 아기 상어 2 JAVA (0) 2022.06.05 Baekjoon 14248 점프 점프 JAVA (0) 2022.05.31 Baekjoon 2219 보안 시스템 설치 JAVA (0) 2022.05.30 Baekjoon 4179 불! JAVA (0) 2022.05.28 댓글