[Algorithm][Python] 백준(BOJ) 11652 카드

최대 1 분 소요

[문제]

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

image

image

image


[내 코드]

import sys

n = int(input())
cards = dict()

for _ in range(n):
    data = int(sys.stdin.readline())

    if data in cards:
        cards[data] += 1
    else:
        cards[data] = 1
    
cards = sorted(cards.items(), key=lambda x : ( -x[1], x[0] ))
print(cards[0][0])


💡문제 풀이

  • 문제를 처음 보고 각 카드 수를 카운트하는 거라서 계수 정렬을 생각했으나, 카드에 적혀있는 수가 -2^64부터 2^64까지라서 그 많은 수의 배열을 선언해두면 메모리 낭비가 될 것 같았다.
  • 그래서 Dict자료형을 사용했다.
    • Dict자료형은 {key : value} 로 저장되어 있다.
    • Value 값은 중복될 수 있으나, Key 값은 중복될 수 없다.
    • 순서가 없기 때문에, 인덱스로는 접근할 수 없고, 키로 접근할 수 있다.
  • sorted()를 사용하여 정렬을 할건데, 반환형은 튜플로 이루어진 리스트이다.
  • 카드의 빈도수, 같다면 작은 수를 기준으로 정렬을 한다.
  • 리스트이므로 인덱스로 가장 앞의 정수를 출력한다.


image

댓글남기기