백준 11652 파이썬

Ddudduu·2023년 3월 4일
0

백준 11652

문제

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

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

입력

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

출력

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

풀이

이 문제는 딕셔너리로 접근하면 된다!

import sys

num = int(input())
cardDict = {}
for i in range(num):
	cardNum = int(sys.stdin.readline())
    
    if cardNum in cardDict:
    	cardDict[cardNum] += 1
    else:
    	cardDict[cardNum] = 1
       
sortedDict = sorted(cardDict.items(), key = lambd x: (-x[1], x[0]))
print(sortedDict[0][0])   
  1. 딕셔너리를 생성하고
  2. 사용자 입력 값이 딕셔너리의 key 값에 있는지 확인!
  3. key 값에 있으면 값 +1
    key 값에 없으면 1로 초기화
    => key : 입력받은 수, value: 횟수
  4. 딕셔너리 value 값으로 정렬, 같으면 작은 key 값으로 정렬
  5. 정렬 후, 0번째 value 값 출력



파이썬에서 Dictionary 사용하기

딕셔너리는 짝꿍이 있는 자료형이라고 생각하면 된다.

딕셔너리 만들기

fruit = {'apple': 1, 'banana' : 2, 'orange' : 3, 'grape' : 4}
print(fruit.items())
keyList = fruit.keys()
valuesList = list(fruit.values())

{'key' : 'value'} 형식으로 생성하고 items() 로 (key, value) 쌍에 접근할 수 있다.
keys(), values() : 모든 key, value 값을 가져올 수 있다.

items() 반복문 활용

for key,value in fruit.items():
  print('key: {}, value:{}'.format(key,value))

key 와 value 에 모두 접근하고 싶은 경우, items() 를 사용하면된다!

in 딕셔너리

key 값이 해당 딕셔너리에 있는지 확인할 때 사용하는 함수이다.

if 'banana' in fruit:
  print("there's a banana")
else:
  print("there's no banana")

value 변경

리스트의 값을 변경하듯이, 딕셔너리[key] = new_value
형식으로 key 에 new_value 를 저장한다.

if 'banana' in fruit:
  fruit['banana'] += 1
else:
  fruit['banana'] -= 1

key 추가, 삭제

del fruit['apple']
fruit['new_apple'] = 1

딕셔너리[new_key] = value 형식으로 새로운 key 값이 들어오면 자동으로 딕셔너리에 추가된다.

del 함수로 삭제!

profile
Android

0개의 댓글