세용용용용 2024. 1. 6. 16:06

 

코딩테스트 연습 - 가장 많이 받은 선물 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

나의 코드

from itertools import combinations
def solution(friends, gifts):
    answer = 0
    # 선물 교환 정보
    gift_dt = {}
    # 선물 지수
    gift_score = {}
    # 선물 받는 갯수
    gift_re = {}
    for i in friends:
        gift_dt[i]=[]
        gift_score[i]=0
        gift_re[i]=0
    #print(gift_re)
    
    # 선물 교환 리스트 돌며 
    # 선물 교환정보, 선물 지수 딕셔너리 만들어준다
    for i in gifts:
        i=i.split(' ')
        gift_dt[i[0]].append(i[1])
        gift_score[i[0]]+=1
        gift_score[i[1]]-=1
    #print(gift_dt)
    #print(gift_score)
    
    # 선물을 교환하는 경우의 수를 combinations으로 만들어 주며
    # 선물 받는 갯수 딕셔너리 만듬
    for i in combinations(friends,2):
        if gift_dt[i[0]].count(i[1])>gift_dt[i[1]].count(i[0]):
            gift_re[i[0]]+=1
        elif gift_dt[i[0]].count(i[1])<gift_dt[i[1]].count(i[0]):
            gift_re[i[1]]+=1
        else:
            if gift_score[i[0]]>gift_score[i[1]]:
                gift_re[i[0]]+=1
            elif gift_score[i[0]]<gift_score[i[1]]:
                gift_re[i[1]]+=1
    
    # 최종 적으로 선물을 가장 많이 받은 개수를 리턴하기위한 answre 치환
    answer = max(gift_re.values())
            
                
    return answer