본문 바로가기
개발/Algorithm 문제 풀이

[프로그래머스] lv.1 가장 많이 받은 선물

by DenverAlmighty 2024. 1. 29.
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/258712?language=python3

 

프로그래머스

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

programmers.co.kr

 

내 코드 

def solution(friends, gifts):
	# {{이름:인덱스}, {이름:인덱스}}
    index={}
    for i in range(0, len(friends)):
        index[friends[i]] = i
    
    # 주고 받은 선물
    arr = [[0 for j in range(len(gifts))] for i in range(len(gifts))]
    for gift in gifts:
        a, b = gift.split(' ')
        arr[index[a]][index[b]] += 1
    
    # 선물 지수
    gift_index = {}
    for i in range(len(friends)):
        send = 0
        receive = 0
        for j in range(len(friends)):
            send += arr[i][j]
            receive += arr[j][i]
        gift_index[i] = send-receive
    
    # 가장 많이 받는 친구의 선물 개수 찾기
    answer = 0
    for i in range(len(friends)):
        gift = 0
        for j in range(len(friends)):
                if arr[i][j] > arr[j][i]:
                    gift += 1
                elif arr[i][j] == arr[j][i]:
                    if gift_index[i] > gift_index[j]:
                        gift +=1
        if answer < gift:
            answer = gift
    return answer

 

코드 수정

 

def solution(friends, gifts):
	# {{이름:인덱스}, {이름:인덱스}}
    #index={}
    #for i in range(0, len(friends)):
    #    index[friends[i]] = i
    index = {v: i for i, v in enumerate(friends)}
    
    # 주고 받은 선물
    arr = [[0 for j in range(len(gifts))] for i in range(len(gifts))]
    for gift in gifts:
        a, b = gift.split(' ')
        arr[index[a]][index[b]] += 1
    
    # 선물 지수
    #gift_index = {}
    #for i in range(len(friends)):
    #    send = 0
    #    receive = 0
    #    for j in range(len(friends)):
    #        send += arr[i][j]
    #        receive += arr[j][i]
    #    gift_index[i] = send-receive
    gift_index = [0]*len(friends)
    for i in range(len(friends)):
    	gift_index = sum(arr[i]) - sum([li[i] for li in arr)
    
    # 가장 많이 받는 친구의 선물 개수 찾기
    answer = 0
    for i in range(len(friends)):
        gift = 0
        for j in range(len(friends)):
                if arr[i][j] > arr[j][i]:
                    gift += 1
                elif arr[i][j] == arr[j][i]:
                    if gift_index[i] > gift_index[j]:
                        gift +=1
        if answer < gift:
            answer = gift
    return answer

 

728x90
반응형