반응형
문제
김형택은 탑문고의 직원이다. 김형택은 계산대에서 계산을 하는 직원이다. 김형택은 그날 근무가 끝난 후에, 오늘 판매한 책의 제목을 보면서 가장 많이 팔린 책의 제목을 칠판에 써놓는 일도 같이 하고 있다.
오늘 하루 동안 팔린 책의 제목이 입력으로 들어왔을 때, 가장 많이 팔린 책의 제목을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고, 알파벳 소문자로만 이루어져 있다.
출력
첫째 줄에 가장 많이 팔린 책의 제목을 출력한다. 만약 가장 많이 팔린 책이 여러 개일 경우에는 사전 순으로 가장 앞서는 제목을 출력한다.
예제 입력 1
5
top
top
top
top
kimtop
예제 출력 1
top
예제 입력 2
9
table
chair
table
table
lamp
door
lamp
table
chair
예제 출력 2
table
예제 입력 3
6
a
a
a
b
b
b
예제 출력 3
a
예제 입력 4
8
icecream
peanuts
peanuts
chocolate
candy
chocolate
icecream
apple
예제 출력 4
chocolate
내가 푼 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine()); // 오늘 팔린 책 수
Map<String, Integer> map = new HashMap<>();
for (int i=0; i<N; i++) {
String name = br.readLine();
if (!map.containsKey(name)) {
map.put(name, 1);
} else {
map.put(name, map.get(name) + 1);
}
}
// values 최대값 찾기
int maxValue = 0;
for (Map.Entry<String, Integer> entry : map.entrySet()) {
if (maxValue < entry.getValue()) {
maxValue = entry.getValue();
}
}
// 최대값 책 제목 구하기
List<String> names = new ArrayList<>();
for (Map.Entry<String, Integer> entry : map.entrySet()) {
if (maxValue == entry.getValue()) {
names.add(entry.getKey());
}
}
// 알파벳 오름차순 정렬
Collections.sort(names);
System.out.println(names.get(0));
}
}
1. Map을 사용하여 key에는 책 제목, value에는 책이 팔린 횟수를 넣어준다.
2. value 에서 가장 큰 값을 maxValue에 담아준다.
3. map을 순회하면서 maxValue와 같이 같은 key를 list에 넣어준다.
4. list를 오름차순 정렬하여, 맨 앞의 값을 출력한다.
*** Map 순회하는 메서드 entrySet() 과 keySet()
entrySet()은 key와 value 모두 뽑아낼 수 있고, keySet은 key로 map.get(key)하여 value 값을 출력할 수 있다.
// entrySet()
for (Entry<String, Integer> entry : map.entrySet()) {
String key = entry.getKey();
int value = entry.getValue();
}
// keySet()
for (String key : map.keySet()) {
int value = map.getKey(key);
}
반응형
'백준 코딩테스트' 카테고리의 다른 글
[백준] 키로거(5397) - Java (0) | 2023.10.30 |
---|---|
[백준] 회사에 있는 사람(7785) - Java (1) | 2023.10.29 |
[백준] 절댓값 힙 (11286) - Java (1) | 2023.10.29 |
[백준] 카드2 (2164) - Java (1) | 2023.10.28 |
[백준] 괄호 (9012) - Java (3) | 2023.10.28 |