백준 | 11652 : 카드 (Java)

usuyn·2021년 9월 14일

알고리즘

목록 보기
7/12

문제에 대한 자세한 정보는 백준 | 11652번 : 카드에서 확인할 수 있다.


풀이

적혀있는 수의 범위가 -2^62~2^62이므로 저장할 때는 long type을 사용해야 한다.
수 정렬하기 3 문제에서 Map을 사용해 풀었던 것처럼 풀이했다.

  1. Map<Long, Integer> map을 생성한다. key에는 입력받은 수, value에는 입력 횟수가 저장된다.
  2. 처음 입력받는 수라면 value에 1을 put, 이미 존재하는 key라면 value에 +1 연산을 해 put 해준다.
  3. 반복문을 사용해 value가 가장 큰 key를 출력한다. value가 같다면 그 중 가장 작은 key값을 출력한다.

소스코드

import java.io.*;
import java.util.*;

public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		int N = Integer.parseInt(br.readLine());
		Map<Long, Integer> map = new HashMap<>();

		for (int i = 0; i < N; i++) {
			long temp = Long.parseLong(br.readLine());
			if (map.containsKey(temp))
				map.put(temp, map.get(temp) + 1);
			else
				map.put(temp, 1);
		}

		Set<Long> keys = map.keySet();
		int count = 0;
		long num = 0;
		
		for(long key : keys) {
			if(count < map.get(key)) {
				count = map.get(key);
				num = key;
			} else if(count == map.get(key)) {
				num = Math.min(num, key);
				count = map.get(num);
			}
		}
		
		bw.write(String.valueOf(num));

		br.close();
		bw.close();
	}
}

메모리, 시간

메모리 : 41208KB
시간 : 388ms


풀이 후

가장 큰 value를 가려내고, value가 같으면 가장 작은 key값을 가려내는 for문만 잘 작성하면 크게 어려운 문제는 아니었다.

문제와는 관련없는 이야기지만 미리보기에서는 sub, sup 태그가 잘 작동하는데 막상 출간 후 확인하면 적용이 안 되어있다..

profile
https://select-dev-from.tistory.com 로 이사 중

0개의 댓글