반응형
풀이
딕셔너리를 이용하여 주고받은 선물의 히스토리를 기록한다. 나중에 선물 지수를 계산할 때 필요하므로 자신이 선물을 몇 개 받았는지 기록하는 received 딕셔너리도 함께 기록해준다.
이후 친구 목록을 순회하며 두 사람의 선물 기록 및 선물 지수를 바탕으로 선물을 받을 개수를 계산하고 반환한다.
def solution(friends, gifts):
# 선물 기록을 저장할 딕셔너리 생성
history = dict() # 2depth, a = {b: 1}; a가 b에게 1개 줌
received = dict() # 받은 개수
for x in friends:
history[x] = dict()
received[x] = 0
for y in friends:
if x == y:
continue
history[x][y] = 0
# 히스토리 기록
for gift in gifts:
a, b = gift.split()
history[a][b] += 1
received[b] += 1
# 다음 달에 주고받을 선물 계산
result = dict(map(lambda x: (x, 0), friends))
for i in range(len(friends)):
for j in range(i+1, len(friends)):
a, b = friends[i], friends[j]
if history[a][b] > history[b][a]:
result[a] += 1
continue
elif history[a][b] < history[b][a]:
result[b] += 1
continue
# 선물지수 계산
a_score = sum(history[a].values()) - received[a]
b_score = sum(history[b].values()) - received[b]
if a_score > b_score:
result[a] += 1
elif a_score < b_score:
result[b] += 1
return(max(result.values()))
반응형
'알고리즘 연습 > 구현, 문자열' 카테고리의 다른 글
[Lv.1 / 프로그래머스 / 파이썬] 대충 만든 자판 (0) | 2024.05.15 |
---|---|
[🥈2 / 백준 5555 / 파이썬] 반지 (0) | 2024.04.12 |
[🥈5 / 백준 4108 / 파이썬] 지뢰찾기 (1) | 2024.01.07 |
[Lv.1 / 프로그래머스 / 파이썬] 붕대 감기 (PCCP 기출문제 1번) (0) | 2023.12.07 |
[🥉2 / 백준 9243 / 파이썬] 파일 완전 삭제 (0) | 2023.10.15 |