입력 값으로 정수가 들어올 것이다.
정수 중 가장 많이 입력된 정수를 출력하는 것이 문제이다.
만약 개수가 같다면 Card Number가 작은 것을 출력한다.
Map을 이용하는 것이 가장 편리할 것이라고 생각하였다.
Map의 메소드 중 getOrDefault라는 것을 사용한다면 중복도 자연스럽게 처리할 수 있으며, card number에 대한 개수 처리도 쉬워질 것이라고 생각하였다.
모든 입력 값을 Map에 넣은 이후 map의 value를 모두 확인하여 크기를 비교하면 풀릴 것이라고 생각하였다.
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
HashMap<Long, Integer> maps = new HashMap<>();
// 중요한 선언 부분이다. Card Numebr는 2^62까지 가능하다.
// int형 데이터로는 모두 담을 수 없다는 의미이므로,
// Long을 통해 처리해야 한다.
// Key는 Card Number, Value는 number에 대한 card 개수를 의미한다.
int N = sc.nextInt();
for(int i =0;i<N;i++) {
long T = sc.nextLong();
maps.put(T, maps.getOrDefault(T,0)+1);
}
Set keys = maps.keySet();
Iterator itr = keys.iterator();
int much = 0;
Long real = (long) 0;
Long value;
// much : 이전까지 Search했던 Card 개수 중 최대값
// real : much에 저장되어 있는 값을 가진 Card Number
// value : 현재 Search하고 있는 Card Number
while(itr.hasNext()) {
value = (Long) itr.next();
int t = maps.get(value);
if(much < t) { // 현재 Search하는 Card 개수가 많을 경우
much = t;
real = value;
}
else if(much==t) { // 같을 경우
if(real > value) { // 작은 값을 선택한다
real = value;
}
}
}
System.out.println(real);
}
}