11652 카드

hey hey·2022년 5월 23일
0

알고리즘

목록 보기
46/57
post-thumbnail

문제

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

준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지고 있는 정수를 구하는 프로그램을 작성하시오. 만약, 가장 많이 가지고 있는 정수가 여러 가지라면, 작은 것을 출력한다.

입력

첫째 줄에 준규가 가지고 있는 숫자 카드의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 숫자 카드에 적혀있는 정수가 주어진다.

출력

첫째 줄에 준규가 가장 많이 가지고 있는 정수를 출력한다.

풀이

  • 숫자를 몇개 입력 받고 그 숫자가 몇개 들어왔는지 세어준 후에 가장 많이 들어있는 숫자가 무엇인지를 찾아낸다 (동점일경우 작은숫자)
  • 되게 간단한 문제 같지만 해시 알고리즘을 사용하지 못할 시 시간제한이 걸린다 .
  • 파이썬에서 해시 알고리즘은 딕셔너리를 사용할 수 있는지 물어보는 것이다
    -> 딕셔너리를 사용할 줄 알아야 한다

딕셔너리 사용법

dict = {} 빈값을 만들어준다
dict[key] = [val] => key의 값이 없다면? 새로 만들어 주고 있다면 수정
dict = {key:val}
-------------------------------------------------------------------
if key in dict:  dict 안에 key 가 들어있는지 확인하고 싶을 떄 '
dict.items() => 키와 value가 묶여서 출력된다.
dict.values()  모든 values만 가져온다.
dict.keys() 모든 keys를 가져온다.
import sys
sys.stdin = open('input.txt')

N = int(input())
graph ={}
for _ in range(N):
    tmp = int(input())
    if tmp in graph:  #tmp 가 딕셔너리 값으로 있는지 확인 
        graph[tmp]+=1  # 값이 있다면 있는값에 +1
    else:            # 값이 없다면 
        graph[tmp] = 1 # 1개로 추가해준다

# print(graph) ==> {5: 2, 3: 2, 1: 1}
# print(graph.items())
values = list(graph.values()) [2,2,1]
keys = list(graph.keys()) [5,3,1]
big = 0
result = 1e20  # 같은 갯수가 있는 숫자중 가장 작은 것을 찾기 위한 큰수

for i in range(len(values)):
    if values[i]==big and keys[i]<result: # 갯수가 똑같은데 이번 게 더 작다면?
        big = values[i]
        result = keys[i]

    if values[i]>big:
        big=values[i]
        result= keys[i]

print(result)
profile
FE - devp

0개의 댓글