[백준] 11652번 카드 - Python / 알고리즘 중급 1/3 - 정렬

ByungJik_Oh·2025년 7월 7일
0

[Baekjoon Online Judge]

목록 보기
186/244
post-thumbnail



💡 문제

준규는 숫자 카드 N장을 가지고 있다. 숫자 카드에는 정수가 하나 적혀있는데, 적혀있는 수는 -262^{62}보다 크거나 같고, 262^{62}보다 작거나 같다.

준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지고 있는 정수를 구하는 프로그램을 작성하시오. 만약, 가장 많이 가지고 있는 정수가 여러 가지라면, 작은 것을 출력한다.

입력

첫째 줄에 준규가 가지고 있는 숫자 카드의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 숫자 카드에 적혀있는 정수가 주어진다.

출력

첫째 줄에 준규가 가장 많이 가지고 있는 정수를 출력한다.


💭 접근

이 문제는 입력으로 주어질 수 있는 카드의 숫자의 범위가 -262^{62} ~ 262^{62}이므로 리스트를 사용하면 메모리 초과가 발생하게 된다.

따라서 입력받은 숫자에 대해서만 개수를 저장해야 하므로 딕셔너리를 사용하여 해결할 수 있다.

입력받은 숫자를 딕셔너리의 key로, 이 숫자의 개수를 value로 저장하여 딕셔너리를 순회하며 각 정수의 개수를 비교하면 된다.


📒 코드

import sys
input = sys.stdin.readline

n = int(input())
num_cnt = {}
for _ in range(n):
    num = int(input())
    if num in num_cnt.keys():
        num_cnt[num] += 1
    else:
        num_cnt[num] = 1

ans = 0
max_cnt = 0
for num in num_cnt:
    if num_cnt[num] > max_cnt:
        max_cnt = num_cnt[num]
        ans = num
    elif num_cnt[num] == max_cnt:
        ans = min(ans, num)
print(ans)

💭 후기

딕셔너리를 활용하는 간단한 문제였다.


🔗 문제 출처

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


profile
精進 "정성을 기울여 노력하고 매진한다"

0개의 댓글