Algorithm

[프로그래머스] Level1 | 가장 많이 받은 선물 - 파이썬(Python) | 2024 KAKAO WINTER INTERNSHIP

토오오끼 2024. 10. 13. 22:55
728x90
반응형

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

 

프로그래머스

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

programmers.co.kr


 

제출 코드

def solution(friends, gifts):
    answer = 0
    n = len(friends)
    friend_dict = dict()
    for i in range(n):
        friend_dict[friends[i]] = i
        
    table = [[0] * n for _ in range(n)]
    gift_indices = [0] * n
    
    for gift in gifts:
    	# a : 준 사람 b : 받은 사람
        a, b = gift.split()
        idx1, idx2 = friend_dict[a], friend_dict[b]
        gift_indices[idx1] += 1
        gift_indices[idx2] -= 1
        table[idx1][idx2] += 1
    
    get_gift = [0] * n
    for i in range(n):
        for j in range(n):
            if i == j:
                continue
            if table[i][j] > table[j][i]:
                get_gift[i] += 1
            elif table[i][j] == table[j][i]:
                if gift_indices[i] > gift_indices[j]:
                    get_gift[i] += 1
    
    answer = max(get_gift)
    
    return answer

 

이후에 gifts에서 이름을 인덱스로 바꿔줘야 했기 때문에 friends의 이름 순서대로 딕셔너리에 인덱스를 저장 해 놓았고

2d 배열을 통해서 주고 받은 선물 내역과 선물 지수를 저장하고자 했다.

 

선물 준 사람은 +1, 선물을 받은 사람은 -1이 되도록 선물 지수를 계산을 했고 2중 for문을 돌면서 다음 달에 받을 선물 개수를 구하고자 했다.

준 선물의 개수가 i>j인 경우 i가 선물을 하나 받고, 준 선물의 개수가 같으면 선물 지수가 i가 j보다 큰 경우에 i가 선물을 받도록 했다.

 

무사히 한번에 통과!

728x90
반응형