[BOJ] 11652. 카드

Jimeaning·2023년 4월 3일
0

코딩테스트

목록 보기
46/143

Python3

문제

입출력

입출력 예시

나의 풀이 (시도)

import sys
n = int(sys.stdin.readline())
num_list = [0] * 100001

for i in range(n):
    num_list[int(sys.stdin.readline())] += 1

print(num_list.index(max(num_list)))
   

0으로 세팅된 리스트를 만들어 놓고 입력받은 숫자에 해당하는 곳에 1씩 더했다. 그중 가장 큰 값을 가지는 인덱스를 출력했는데 IndexError가 떴다.

주요 포인트

딕셔너리를 사용하는 문제였다.

숫자를 입력받아 card에 저장한다.
들어 온 값이 딕셔너리에 있으면 1을 더하고, 없으면 1을 대입한다.

딕셔너리를 sorted 함수를 사용해 정렬한다.
이때 sort 함수는 사용할 수 없다. sorted()는 내장함수지만, sort()는 리스트에서 제공해주는 메소드이기에 딕셔너리에서는 볼 수 없기 때문이다.

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

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

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

최종 코드

import sys
n = int(sys.stdin.readline())

dic = {}

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

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

피드백

딕셔너리에 대해 복기할 수 있는 문제였다. 또한 딕셔너리에서는 sorted 함수를 사용해 정렬해야 한다는 것을 기억하자.

profile
I mean

0개의 댓글