위 필요한 정보를 리스트들에 담으려면 어떤 인덱스가 어떤 사람인지 파악할 수 있어야 함 → 근데 어떻게? 스치듯 friends.index(friend)도 생각해보았으나…아무래도 시간이 너무 오래 걸릴거 같아서 어디 저장을 해야겠다고 생각함
딕셔너리에 key: 이름 value: 인덱스 로 저장해 인덱스 접근 O(1)에 가능하도록 만듦
다음 달 받을 수 있는 선물 수 계산
내가 특정 친구랑 비교해봤을 때 선물을 더 많이 줬어 → 걔한테 받을 수 있음
나랑 특정 친구랑 똑같이 주고 받았어(0개 0개도 포함) → 내 선물 지수가 더 높으면 걔한테 받을 수 있음
📖풀이
📎구현
def solution(friends, gifts): friends_cnt = len(friends) idx = {friend: i for i, friend in enumerate(friends)} # 인덱스 저장 givetake_table = [[0 for _ in range(friends_cnt)] for _ in range(friends_cnt)] #주고받은 선물 gift_grade = [0 for _ in range(friends_cnt)] # 선물지수 next_month = [0 for _ in range(friends_cnt)] # 다음 달 선물 # 주고받은 선물 체크 & 선물지수 계산 for gift in gifts: give, take = gift.split() givetake_table[idx[give]][idx[take]] += 1 gift_grade[idx[give]] += 1 gift_grade[idx[take]] -= 1 # 다음달에 받을 수 있는 선물 for a in range(friends_cnt): for b in range(friends_cnt): if a==b: continue ## 다음 달에 선물을 받을 수 있는 경우 # 1. 더 많이 선물 준 경우 if givetake_table[a][b] > givetake_table[b][a]: next_month[a] += 1 # 2. 같은 수의 선물을 주고 받은 경우엔 선물지수가 클 때 if givetake_table[a][b] == givetake_table[b][a]: if gift_grade[a] > gift_grade[b]: next_month[a] += 1 return max(next_month)
📖What I learned️
주고받은 선물 체크할 2차원 리스트, 선물 지수를 담은 리스트를 만들었어야하는데 각 사람의 이름은 인덱스가 될 수 없으니 인덱스 정보를 처리해줬어야 함
이 때 인덱스 처리를 잘했당 ㅎㅎ
순서대로 이름을 key, 인덱스를 value로 가지는 딕셔너리를 만들어서 인덱스를 아주 잘~ 기록해줬어!!