https://school.programmers.co.kr/learn/courses/30/lessons/258712
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 접근
우선 조건을 먼저 정리해 보았다.
1. 선물을 주고받은 기록이 있다면 => 주고받은 크기를 비교해 하나를 더 받거나 준다.
2. 선물을 주고받은 기록이 없다면 or 같다면 => 선물 지수를 비교 => 이마저 같으면 주고받지 않음
그리고 어떻게 구현할지 고민해 보았다.
주어진 예시들을 설명하기 위해 마련된 테이블이 2개
1. 두 사람이 주고받은 선물들의 개수를 각각 저장할 2차원 배열
2. 선물 지수를 계산해 담을 1차원 배열
코드
def solution(friends, gifts):
name_table = {}
for i, friend in enumerate(friends): # key-value(이름-숫자)
name_table[friend] = i
# num_gifts[i][j]: i가 j에게 준 선물의 개수
num_gifts = [[0] * len(friends) for _ in range(len(friends))]
for gift in gifts:
giver, receiver = gift.split()
num_gifts[name_table[giver]][name_table[receiver]] += 1
# gifts_index: 선물 지수
gifts_index = [0] * len(friends)
transposed_num_gifts = list(zip(*num_gifts))
for friend in friends:
i = name_table[friend]
gifts_index[i] = sum(num_gifts[i]) - sum(transposed_num_gifts[i])
#최대 선물 저장할 변수
max_gifts = 0
for i, receiver in enumerate(friends):
gifts = 0
for j, giver in enumerate(friends):
if i == j:
continue
if num_gifts[i][j] > num_gifts[j][i]:
gifts += 1
elif num_gifts[i][j] == num_gifts[j][i]:
if gifts_index[i] > gifts_index[j]:
gifts += 1
max_gifts = max(max_gifts, gifts)
return max_gifts
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스]Lv3. 표현 가능한 이진트리(Python) (1) | 2024.02.13 |
---|---|
[프로그래머스]Lv2. 혼자 하는 틱택토(Python) (0) | 2024.02.12 |
[프로그래머스]Lv2. 리코쳇 로봇(Python) (0) | 2024.02.09 |
[프로그래머스]Lv2. 이모티콘 할인행사(Python) (0) | 2024.02.06 |
[프로그래머스]Lv2. 요격 시스템(Python) (0) | 2024.02.05 |