Search
Duplicate

가장 많이 받은 선물

Level
1
문제 진행 상태
코드 완료
해설 완료
알고리즘 & 자료구조
해시
정답률 (%)
22
태그
2024 KAKAO WINTER INTERNSHIP

문제 링크

풀이 과정

본 문제는 코드 상에 풀이 과정을 제시하였습니다.

전체 코드

from collections import defaultdict from itertools import combinations def solution(friends, gifts): ''' 1. 각 유저별 선물 받은 횟수 -> given_counts_dict 2. 각 유저별 선물 한 횟수 -> give_counts_dict 3. 상호작용 정보 -> interaction_dict 4. 앞으로 선물을 받아야할 횟수 -> will_given_counts 5. 선물 지수 -> score_dict 6. 정산 정보 -> final_dict ''' answer = [] given_counts_dict = defaultdict(int) give_counts_dict = defaultdict(int) interaction_dict = defaultdict(dict) will_given_counts = {user: 0 for user in friends} score_dict = defaultdict(dict) for gift in gifts: give_user = gift.split(' ')[0] given_user = gift.split(' ')[1] # 선물 한 사람 if give_user in give_counts_dict: give_counts_dict[give_user] += 1 else: give_counts_dict[give_user] = 1 # 선물 받은 사람 if given_user in given_counts_dict: given_counts_dict[given_user] += 1 else: given_counts_dict[given_user] = 1 # 상호 작용 계산 (선물을 준 횟수 기준) if given_user in interaction_dict[give_user]: interaction_dict[give_user][given_user] += 1 else: interaction_dict[give_user][given_user] = 1 # 선물 지수 계산 for user in friends: score_dict[user] = give_counts_dict[user] - given_counts_dict[user] # 받을 선물 계산 for combs in combinations(friends, 2): user1, user2 = combs[0], combs[1] # 1. user1만 선물 받은 경우 if user1 in interaction_dict[user2] and user2 not in interaction_dict[user1]: will_given_counts[user2] += 1 # 2. user2만 선물 받은 경우 elif user1 not in interaction_dict[user2] and user2 in interaction_dict[user1]: will_given_counts[user1] += 1 # 3. user1, 2가 서로 선물 주고 받은 경우, user1, 2가 서로 선물을 주고 받지 않은 경우 elif (user1 in interaction_dict[user2]) and (user2 in interaction_dict[user1]): if interaction_dict[user2][user1] > interaction_dict[user1][user2]: will_given_counts[user2] += 1 elif interaction_dict[user2][user1] < interaction_dict[user1][user2]: will_given_counts[user1] += 1 elif interaction_dict[user2][user1] == interaction_dict[user1][user2]: user1_score, user2_score = score_dict[user1], score_dict[user2] if user1_score == user2_score: pass elif user1_score > user2_score: will_given_counts[user1] += 1 elif user1_score < user2_score: will_given_counts[user2] += 1 # 4. user1, 2가 서로 선물을 주고 받지 않은 경우 elif (user1 not in interaction_dict[user2]) and (user2 not in interaction_dict[user1]): user1_score, user2_score = score_dict[user1], score_dict[user2] if user1_score == user2_score: pass elif user1_score > user2_score: will_given_counts[user1] += 1 elif user1_score < user2_score: will_given_counts[user2] += 1 # 결과 정리 for user in will_given_counts.keys(): answer.append(will_given_counts[user]) return sorted(answer)[-1]
Python
복사