[프로그래머스] 가장 많이 받은 선물 (2024 KAKAO WINTER INTERNSHIP) - Python
문제
가장 많이 받은 선물 (2024 KAKAO WINTER INTERNSHIP)
아이디어
A가 B에게 선물을 주는 것을 카운트하기 위해 해시맵(딕셔너리)을 활용했다.
다음달에 가장 많은 선물을 받은 사람을 찾기 위해, 각각의 친구에 대해 다음 달에 받을 선물 개수를 계산한다.
이 때 주어진friends
의 길이가 최대 50이므로 2중 for문을 사용했다.a가 b로부터 선물을 받을 수 있는 경우는 2가지 경우가 있다.
a가 더 많이 준 경우
똑같이 주고 받았거나 아예 주고 받지 않았을 때, a의 선물 지수가 더 큰 경우
참고로, 선물 지수는 입력값인gifts
를 처리할 때 함께 계산할 수 있다. (누군가에게주면 +1, 받으면 -1
)1 2 3 4 5 6 7
gift = {f: {f: 0 for f in friends} for f in friends} point = {f: 0 for f in friends} for g in gifts: a, b = g.split() gift[a][b] += 1 point[a] += 1 point[b] -= 1
그럼 다음과 같이 최대값을 탐색할 수 있다.
1 2 3 4 5 6 7 8
answer = 0 for a in friends: cnt = 0 for b in friends: if a != b: if gift[a][b] > gift[b][a] or (gift[a][b] == gift[b][a] and point[a] > point[b]): cnt += 1 answer = max(answer, cnt)
전체 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def solution(friends, gifts):
answer = 0
gift = {f: {f: 0 for f in friends} for f in friends}
point = {f: 0 for f in friends}
for g in gifts:
a, b = g.split()
gift[a][b] += 1
point[a] += 1
point[b] -= 1
for a in friends:
cnt = 0
for b in friends:
if a != b:
if gift[a][b] > gift[b][a] or (gift[a][b] == gift[b][a] and point[a] > point[b]):
cnt += 1
answer = max(answer, cnt)
return answer
This post is licensed under CC BY 4.0 by the author.