Algorithm/정렬

[Baekjoon 11652 / Python / 실버4] 카드

양선규 2024. 8. 19. 00:09
728x90
반응형

문제

import sys
input = sys.stdin.readline

N = int(input()) # 카드 개수
cards = {}

for _ in range(N):

    # 카드를 key로 등록하고 등장할 때마다 value를 1씩 증가시킨다
    num = int(input())
    if num in cards:
        cards[num] += 1
    else:
        cards[num] = 1

# items()를 붙여 튜플 형태로 변환한다. 딕셔너리를 정렬하기 위해 필요한 작업.
# -x[1] : -를 붙이면 내림차순 정렬을 하게 된다.
sortedCards = sorted(cards.items(), key=lambda x: (-x[1], x[0]))
print(sortedCards[0][0])

 

정렬, 해시 테이블 문제이다.

문제 원리 자체는 쉬웠지만 딕셔너리(해시 테이블)의 사용법이 헷갈려서 고생을 좀 했다.

 

카드를 입력받을 때, 딕셔너리에 존재하지 않는다면 카드 값을 key로, value를 1로 설정하여 추가한다.

카드를 입력받을 때, 딕셔너리에 존재한다면 해당 카드 값을 key로 갖는 value를 1만큼 증가시킨다.

입력이 끝나면 가장 높은 value를 갖는 key를 출력하면 되는데, 같은 value를 가졌다면 더 작은 key를 출력하면 된다.

 

그것을 위해 sorted로 정렬한다. 우선 items()를 사용해 딕셔너리를 튜플 형태로 변환한다. 딕셔너리는 정렬할 수 없으므로 튜플로 변환해준다.

그리고 lambda로 정렬 조건을 설정해 주는데, 1순위는 value이다. -x[1] 형태로 -를 붙임으로써 내림차순으로 정렬되게 하며, 같은 value를 가졌다면 2번째 조건인x[0]을 통해 작은 key를 같는 값이 가장 앞에 오게 된다.

 

마지막으로 가장 앞에 있는 key를 출력하면 된다.

728x90
반응형