가장 많이 받은 선물
https://school.programmers.co.kr/learn/courses/30/lessons/258712
from collections import Counter
def initialize(friends):
gift_info_dict = {}
for target in friends:
gift_info_dict.update({
target: {
"send": [],
"give": [],
"value": 0,
}
})
return gift_info_dict
def make_gift_form(gifts, data):
for i in gifts:
i = i.split(" ")
sender = i[0]
giver = i[1]
# 선물 보낸 처리
data.get(sender).get("send").append(giver)
data.get(sender).update({
"value": data.get(sender).get('value') + 1
})
# 선물 받은 처리
data.get(giver).get("give").append(sender)
data.get(giver).update({
"value": data.get(giver).get('value') - 1
})
return data
def cal_result(friends, gift_data):
value_list = []
for k, v in gift_data.items():
value = 0
send_cnt = Counter(gift_data[k]['send'])
gict_cnt = Counter(gift_data[k]['give'])
for friend in friends:
if k != friend:
if send_cnt[friend] - gict_cnt[friend] == 0:
# 서로 동일하게 선물을 주고 받은 경우 선물지수로 체크
# 서로 주고 선물을 주고 받은 적이 없는 경우 선물지수로 체크
if v['value'] > gift_data[friend]['value']:
value += 1
elif send_cnt[friend] > gict_cnt[friend]:
value += 1
value_list.append(value)
return max(value_list)
def solution(friends, gifts):
gift_info_dict = initialize(friends=friends)
gift_data = make_gift_form(gifts=gifts, data=gift_info_dict)
return cal_result(friends=friends, gift_data=gift_data)
오랜만에 코테문제를 풀어서 생각보다 시간이 오래 걸렸습니다.
가능한 함수화하여 코드 가독성을 높이려고 코드를 짰습니다.
처음에 initialize 를 통해서 초기변수를 만들어 주고, make_gift_form 을 통해서 선물을 주고받은 데이터 폼 양식을 만들어 줬습니다.
이 과정에서 어떻게 구현해야 할지 고민을 많이 했습니다.
추후 cal_result 하는 부분에서 카운터를 사용하여 처리 했는데 이 과정까지 전부 make_gift_form 부분에서 처리 하려 했으나 함수 1개에 1개의 기능을 넣는 것이 가독성 면에서 더 좋다고 생각해서 별도로 cal_result 부분에서 처리 하게 됐습니다.
제 기준으로 다행히 못 풀 정도는 아니었지만 역시나 카카오 코테는 어려운 편인 것 같습니다 ㅎㅎ