문제 : https://www.acmicpc.net/problem/11652

 

11652번: 카드

준규는 숫자 카드 N장을 가지고 있다. 숫자 카드에는 정수가 하나 적혀있는데, 적혀있는 수는 -262보다 크거나 같고, 262보다 작거나 같다. 준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지

www.acmicpc.net

문제 요약 : 가장 많이 갖고 있는 카드 번호 출력

입력 출력
1 ≤ n(카드 수) ≤ 1000000
-2^62 ≤ 카드번호 ≤ 2^62
가장 많이 갖고 있는 카드 출력(개수 같을 경우 작은 수)

 

JAVA

소스코드 : https://github.com/cbkpar/BOJ/blob/main/boj_11652.java

채점 번호 아이디 문제 번호 결과 메모리 시간 언어 코드 길이
30645018 cbkpar 11652 맞았습니다!! 24820KB 332ms Java 11 655B
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
	
	public static void main(String args[]) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n,i,m,k;
		long t,ans;
		n = Integer.parseInt(br.readLine());
		long[] arr = new long[n];
		for(i=0;i<n;i++) arr[i] = Long.parseLong(br.readLine());
		Arrays.sort(arr);
		t = ans = arr[0];
		m = k = 1;
		for(i=1;i<n;i++) {
			if(t==arr[i]) {
				k++;
			}else {
				t = arr[i];
				k = 1;
			}
			if(k>m) {
				m = k;
				ans = t;
			}
		}
		System.out.println(ans);
	}
}

카드를 받은 뒤 번호 순으로 정렬 한 뒤

같은 번호의 개수를 세며 계산해준다.

 

느린코드 )

HashMap을 사용하여 해당 번호에 대해 몇개 입력 받았는지 계산하는 알고리즘을 작성하였다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

public class Main {
	
	public static void main(String args[]) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		Map<Long, Integer> map = new HashMap<Long, Integer>();
		int n,i,m;
		long t,ans;
		n = Integer.parseInt(br.readLine());
		for(i=0;i<n;i++) {
			t = Long.parseLong(br.readLine());
			if(map.containsKey(t)) {
				map.put(t,map.get(t)+1);
			}else {
				map.put(t,1);
			}
		}
		ans = Long.MAX_VALUE;
		m = 0;
		for(Long k : map.keySet()) {
			if(map.get(k)>m) {
				m = map.get(k);
				ans = k;
			}else if(map.get(k)==m) {
				ans = Math.min(ans, k);
			}
		}
		System.out.println(ans);
	}
}

+ Recent posts