728x90
https://school.programmers.co.kr/learn/courses/30/lessons/258712?language=python3
제출 코드
def solution(friends, gifts):
answer = 0
n = len(friends)
friend_dict = dict()
for i in range(n):
friend_dict[friends[i]] = i
table = [[0] * n for _ in range(n)]
gift_indices = [0] * n
for gift in gifts:
# a : 준 사람 b : 받은 사람
a, b = gift.split()
idx1, idx2 = friend_dict[a], friend_dict[b]
gift_indices[idx1] += 1
gift_indices[idx2] -= 1
table[idx1][idx2] += 1
get_gift = [0] * n
for i in range(n):
for j in range(n):
if i == j:
continue
if table[i][j] > table[j][i]:
get_gift[i] += 1
elif table[i][j] == table[j][i]:
if gift_indices[i] > gift_indices[j]:
get_gift[i] += 1
answer = max(get_gift)
return answer
이후에 gifts에서 이름을 인덱스로 바꿔줘야 했기 때문에 friends의 이름 순서대로 딕셔너리에 인덱스를 저장 해 놓았고
2d 배열을 통해서 주고 받은 선물 내역과 선물 지수를 저장하고자 했다.
선물 준 사람은 +1, 선물을 받은 사람은 -1이 되도록 선물 지수를 계산을 했고 2중 for문을 돌면서 다음 달에 받을 선물 개수를 구하고자 했다.
준 선물의 개수가 i>j인 경우 i가 선물을 하나 받고, 준 선물의 개수가 같으면 선물 지수가 i가 j보다 큰 경우에 i가 선물을 받도록 했다.
무사히 한번에 통과!
728x90