2024 KAKAO WINTER INTERNSHIP 문제
선물을 직접 전하기 힘들때 카카오톡 선물하기 기능을 이용해 축하 선물을 보낼 수 있습니다. 당신의 친구들이 이번 달 까지 선물을 주고받은 기록을 바탕으로 다음 달에 누가 선물을 많이 받을지 예측하려고 합니다...
로 시작하는 문제이다.
주고 받은 것을 체크해서 선물 지수(선물 준 수 - 선물 받은 수)를 구하고, 상대와 비교하여 많이 준 쪽이 다음달에 상대에게 선물을 받는다는.. 기브앤테이크가 확실한 문제 였다..!
필요한 최종 결과값은 다음달에 가장 많은 선물을 받은 사람이 몇 개를 받느냐..!

아무튼..!
우선 어떤 값을 구해야 할지 체크 해보았다.
서로 서로 매칭이 필요하고, 결국 선물을 받는 경우를 보면 되니까..
1. 상대 보다 많이 준 경우
2. 주고 받음이 같거나 없다면 전체 선물 지수 가 높은 경우
주고, 받음을 각각 담기엔 귀찮으니 주었다 +1 받았다 -1 로 체크하기로 했다..
최종 작성한 코드는 아래와 같다!
pinfo = {} # 주고 받은 수 넣을 딕셔너리
for i in range(len(friends)):
pinfo[friends[i]]={}
for j in range(len(friends)):
if i==j: continue
pinfo[friends[i]][friends[j]]=0
for gift in gifts: # 주었다 +1 받았다 -1
gn,rn = gift.split(" ")
pinfo[gn][rn]+=1
pinfo[rn][gn]-=1
pcount=[0]*len(friends) # 선물 지수
for fi in range(len(friends)):
pcount[fi] = int(sum(pinfo[friends[fi]].values()))
final_count = [0]*len(friends)
for i,f1 in enumerate(pinfo):
for item in pinfo[f1].items():
if item[1]>0: # 현재 f1이 더 많이 줌
final_count[i]+=1
elif item[1]==0: # 같거나 주고 받지 않음
# 여기서 pcount 와 pinfo 가 가진 리스트의 인덱스가 다른것 주의
# 그래서 j로 pcount 보면 안됨
if pcount[i]>pcount[friends.index(item[0])]: # 선물 지수 비교
final_count[i]+=1
answer = max(final_count)
return answer
선물 지수 비교시 처음에 items 가 있는 for 문을 enumerate로 돌려 j 값을 이용해 pcount 의 상대 인덱스로 사용했다가 조금 헤맸다.. ^^
