문제 링크
주의사항
- JAVA를 사용하여 프로그램을 사용하였습니다.
- 백준에서 코드를 작성하였을 때 아래 형태에서 Main에서 결과가 출력되어야 합니다.
public class Main{
public static void main(String[] args){
}
}
문제 설명
접근 방법
이 문제에 핵심
1. N개의 책의 제목에서 가장 많이 팔린 책의 제목을 결과로 출력합니다.
2. 팔린 양이 같을 때에는 사전 순으로 더 빠른 책의 제목을 결과로 출력합니다.
3. 책의 제목은 소문자이며 길이는 50보다 작습니다.
알고리즘 진행 순서.
1. 입력된 책의 정보를 저장합니다.
2. 책을 구매한 횟수가 가장 큰 책의 제목을 사전 순으로 빠른 것을 구합니다.
3. 책의 제목을 출력합니다.
구매한 횟수 비교하기.
저는 HashMap<String, Integer>를 이용하여 각 제목에 대하여 구매한 횟수를 저장하였습니다.
"abc", "bca", "abc"를 구매하였을 때 HashMap에는 아래와 같이 저장됩니다.
abc | 2 |
bca | 1 |
모든 책의 제목을 저장한 뒤 구매한 횟수를 비교해서 최대 구매한 책의 제목을 구합니다.
예제입력 2.
1. 입력된 책의 정보를 저장합니다.
N : 9
table
chair
table
table
lamp
door
lamp
table
chair
2. 책을 구매한 횟수가 가장 큰 책의 제목을 사전 순으로 빠른 것을 구합니다.
table | 4 |
chair | 2 |
lamp | 2 |
door | 1 |
구매한 횟수가 가장 많은 책의 제목 : table(4)
3. 책의 제목을 출력합니다.
table 결과로 출력합니다.
- BufferedReader를 사용하여 입력되는 정보를 저장합니다.
- 입력되는 책의 제목들에 대하여 HashMap을 통해서 구매한 횟수를 저장하였습니다.
- 각 책의 제목에 대하여 구매 횟수 비교하여 최대 구매한 횟수에 책을 구합니다.
- 최대 횟수를 구매한 책의 제목을 BufferedWriter 저장하였습니다.
- BufferedWriter에 저장된 결과값을 출력하였습니다.
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
public class Main {
static HashMap<String, Integer> map = new HashMap<>(); //책 구매 횟수 저장 Map
static int N, max = Integer.MIN_VALUE;
static String answer = "";
public static void main(String[] args) throws IOException{
//입력값 처리하는 BufferedReader
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//결과값 출력하는 BufferedWriter
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
N = Integer.parseInt(br.readLine());
//입력되는 책의 제목 Map에 저장
for(int i=0;i<N;i++){
String str = br.readLine();
if(map.containsKey(str))
map.put(str, map.get(str) + 1);
else
map.put(str, 1);
}
//각 책의 제목에 대하여 구매한 횟수 가장 큰 책 구하기
for(String key : map.keySet()){
//구매한 횟수가 현재 최대값보다 큰 책인 경우
if(map.get(key) > max){
answer = key;
max = map.get(key);
}
//최대값과 같은 경우 사전 순 더 빠른 책의 제목 비교하기
else if(map.get(key) == max){
ArrayList<String> list = new ArrayList<>();
list.add(answer);
list.add(key);
Collections.sort(list); //정렬
if(list.get(0).equals(key))
answer = key;
}
}
bw.write(answer + ""); //최대 구매 책의 제목 BufferedWriter 저장
bw.flush(); //결과 출력
bw.close();
br.close();
}
}
'백준' 카테고리의 다른 글
[백준] 알고리즘 분류(트리,JAVA)1240번, 노드사이의 거리 (0) | 2022.10.08 |
---|---|
[백준] 알고리즘 분류(트리,JAVA)4256번, 트리 (2) | 2022.10.07 |
[백준] 알고리즘 분류(트리,JAVA)9934번, 완전 이진 트리 (0) | 2022.10.06 |
[백준] 알고리즘 분류(트리,JAVA)14725번, 개미굴 (0) | 2022.10.06 |
[백준] 알고리즘 분류(문자열,JAVA)1120번, 문자열 (0) | 2022.10.06 |
댓글