생각보다는 쉬웠다.. 요즘 한번에 통과한 적이 많지 않은데, 오랜만에 한번에 통과해서 기분이 좋다 ~ 😆
아이디어 ❕
딕셔너리를 활용해서 풀었다!
상황을 나누고, 상황마다 어떤 행동을 해야 할지 생각해서 코딩했다.
숫자 1이 들어왔을 때
이름, K개, 각 가치를 각각 저장함(각각의 가치는 리스트로 저장)
1) 처음 나오는 고릴라이면, 딕셔너리에 저장(key는 고릴라 이름, value는 정보의 가치들을 리스트 형태로)
2) 전에 나왔던 고릴라이면, 딕셔너리에 추가된 정보 부분만 추가함(extend
를 썼다. 알고만 있었는데, 이걸 써보는 건 처음인 것 같다 ㅎㅎ)숫자 2가 들어왔을 때
이름, B개를 각각 저장
1) 그 고릴라가 있는지 체크(혹시 몰라서)있으면 그 딕셔너리의 value(리스트 형태! 정보 가치들이 저장되어있음)를 내림차순으로 정렬했다. 1-1) B개 이하이면 정보를 모두 구매하고, 그 고릴라 이름 key를 아예 없앴다. 1-2) B개 초과이면 B개 정보만 구매하고, 구매한 정보들은 파기하게 했다. (리스트 슬라이싱 활용)
코드 👩💻
import sys
input = sys.stdin.readline
Q = int(input())
information_gorillas = {}
hosuk_information_value_sum = 0
for _ in range(Q):
query = input().split()
if query[0] == '1': # 정보 얻은 고릴라 이름, 정보의 개수, 정보의 가치
name = query[1]
K = int(query[2])
K_values = list(map(int, query[3:]))
if information_gorillas.get(name): # 이미 나온 적 있는 고릴라이면 추가된 정보관련 내용을 추가
information_gorillas[name].extend(K_values)
else: # 처음 나온 고릴라이면
information_gorillas[name] = K_values
elif query[0] == '2': # 호석이가 접촉한 고릴라, 호석이가 구매하는 정보의 개수
name = query[1]
B = int(query[2])
# 그 고릴라가 있는지 체크
if information_gorillas.get(name):
# 있으면 정보 가치에 따라서 내림차순 정렬
information_gorillas[name].sort(reverse=True)
# B개 이하일 경우 정보 모두 구매, 고릴라 삭제
if len(information_gorillas[name]) <= B:
hosuk_information_value_sum += sum(information_gorillas[name])
del information_gorillas[name]
else: # B게 보다 많다면
# B개 정보를 구매하고
hosuk_information_value_sum += sum(information_gorillas[name][:B])
# 고릴라는 그 정보를 파기하기
information_gorillas[name] = information_gorillas[name][B:]
print(hosuk_information_value_sum)
728x90
'즐거운 PS 👩💻🥰' 카테고리의 다른 글
[백준-파이썬] 2573: 빙산 (0) | 2021.10.08 |
---|---|
[백준-파이썬] 2258: 정육점 (0) | 2021.10.08 |
[백준-파이썬] 1463: 1로 만들기 (0) | 2021.10.08 |
[백준-파이썬] 20164: 홀수 홀릭 호석 (0) | 2021.10.08 |
[백준-파이썬] 11067: 모노톤길 (0) | 2021.10.08 |