문제 내용은 입력으로 숫자 카드를 받은 뒤, 가장 많이 나온 카드를 출력해줘야 하는데 여기서 카드 갯수가 가장 많은 항목이 여러개일 경우, 작은 숫자를 먼저 출력해줘야 한다
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.TreeMap;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int count = Integer.parseInt(br.readLine());
TreeMap<Long, Integer> map = new TreeMap<>();
for (int i = 0; i < count; i++) {
long input = Long.parseLong(br.readLine());
map.put(input, map.getOrDefault(input, 0) + 1);
}
long maxValue = Collections.max(map.values());
long ans = map.entrySet()
.stream()
.filter(entry -> entry.getValue() == maxValue)
.findFirst()
.get()
.getKey();
System.out.println(ans);
}
}
문제 풀다가 놓치기 쉬운 부분이 숫자 범위가 int를 넘어서기 때문에 반드시 long을 사용해줘야 하고, 이후Map에 값별 갯수를 넣어주자, 여기서 TreeMap을 사용해주면 Key 기준 작은 수가 먼저 오게 정렬되기 때문에 Map의 최대값을 찾은 후, 처음부터 시작해서 최대값을 찾다가, 가장 먼저 찾은 최대값이 가장 작으면서도 가장 큰 수가 되므로 이걸 출력해주면 끝이다
Leave a Reply