.png)
숫자 카드 N개가 존재한다.
적혀있는 수는 2의 +- 62제곱이다.
가장 많이 가지고 있는 카드의 수를 출력한다.
결과가 여러개라면 숫자가 작은 것을 출력한다.
.png)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static long[] P; // 2의 62제곱이 되면서 Integer의 범위를 넘어감
public static int N;
public static StringBuilder str = new StringBuilder();
public static long mode; 개수가 많은 정수를 넣을 값
public static int modeCnt = 1, curCnt = 1; // 가장많은 수의 및 현재 계산중이 카드 카운트 변수들
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
P = new long[N];
for(int i=0;i<N;i++) {
P[i] = Long.parseLong(br.readLine());
}
sort();
System.out.println(mode);
}
public static void sort() {
Arrays.sort(P); // 배열을 정렬한다. 정렬의 특징인 정렬을 하고 나면 주위에는 비슷한 숫자들이 분포한다. 즉 배열 전체를 for문을 통해 (N * N) 탐색을 하는 것보다 정렬을 한 후
주위의 index들만을 탐색해 탐색 시간을 줄인다.
mode = P[0]; //시작값은 맨앞의 index를 넣어준다.
for(int i=1;i<N;i++) {
if(P[i] == P[i-1]) { //index 1부터 count를 시작 앞의 값과 같다면 ++
아니라면 curCnt = 1 을 해준다.
curCnt ++;
} else {
curCnt =1;
}
if(curCnt > modeCnt) { //방금 숫자를 센 값이 그 앞의 계산식의 카드 수보다 많다면 바꿔준다. 그리고 해당 정수값을 mode에 넣어준다.
modeCnt = curCnt;
mode = P[i];
}
}
}
}