📖 문제 링크
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])
'알고리즘 > Python' 카테고리의 다른 글
[백준/Python] 9012번: 괄호 (0) | 2022.01.25 |
---|---|
[백준/Python] 11655번: ROT13 (0) | 2022.01.25 |
[백준/Python] 10989번: 수 정렬하기 3 (0) | 2022.01.24 |
[백준/Python] 10825번: 국영수 (0) | 2022.01.24 |
[백준/Python] 10814번: 나이순 정렬 (0) | 2022.01.24 |