11652 카드

문제 이해

입력 값으로 정수가 들어올 것이다.
정수 중 가장 많이 입력된 정수를 출력하는 것이 문제이다.
만약 개수가 같다면 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);
	}
}

결과

좋은 웹페이지 즐겨찾기