알고리즘/Python

[백준/Python] 11652번: 카드

_SIHA_ 2022. 1. 25. 01:23

📖  문제 링크

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

 

11652번: 카드

준규는 숫자 카드 N장을 가지고 있다. 숫자 카드에는 정수가 하나 적혀있는데, 적혀있는 수는 -262보다 크거나 같고, 262보다 작거나 같다. 준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지

www.acmicpc.net

 

👩‍💻  문제풀이

 

10989 문제와 같이 입력될 배열을 모두 할당시켜놓은 후 해결하려 했다.

하지만 2의 62승이라는 어마어마한 숫자가 입력된다고 하니 위의 방법은 불가능했다.

 

이 문제는 파이썬의 Dictionary를 활용하는 문제였다.

카드번호를 key로 저장하고 해당 카드가 들어올때마다 value값을 1씩 증가시켜 카드의 개수를 저장하면 되는 간단한 방식이다.

 

모두 입력받았다면 sorted() 함수를 이용하여 정렬한다. 

( sorted()는 내장함수이며, sort()는 리스트에서 제공해주는 메소드이기에 딕셔너리에서는 볼 수 없다. )

 

1. value값(카드 개수)를 내림차순으로 정렬 ->  가장 많은 개수를 가진 카드가 첫 번째 인덱스로 정렬됨 

2. key값(카드번호)를 오름차순으로 정렬 -> 개수가 같다면 카드번호가 작은 것을 출력하는 조건 수행

 

 

해결 완료! 

 

 

  최종 코드

import sys

n = int(input())

dic = {}

for i in range(n):
    card = int(sys.stdin.readline())
    if card in dic :
        dic[card] += 1
    else:
        dic[card] = 1

result = sorted(dic.items(), key = lambda x:(-x[1], x[0]))
print(result[0][0])