미소를뿌리는감자의 코딩
[프로그래머스 2024/11/4] 2024 KAKAO WINTER INTERNSHIP > 가장 많이 받은 선물 본문
728x90
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/258712?language=python3
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
2. 접근 방법

우선, friends들에 대해서 idx 번호를 부여하여, 2중 리스트에서 사용할 수 있도록 하였다.
따라서 muzi에게는 0번, ryan에게는 1번, frodo 는 2, neo는 3의 idx가 부여되었다.
2중 리스트를 만들고, arr[0][2] 라면, 0번이 2번에게 받은 선물의 수를 나타내도록 코드를 구성하였다.
또한, 주고 받은 것을 기록하기 위해 give_take이라는 2중 리스트를 만들었다.
give_take[3][0] = 3번이 받은 선물의 개수를 의미
give_take[3][1] = 3번이 준 선물의 개수를 의미
하도록 코드를 구성하였다.
이후, 조건문을 통해서, future이라는 리스트에 i가 받을 선물의 개수를 기록해 주었다.
이후, return max(future)을 통해서 최대 선물의 개수를 받환해 주었다.
3. 코드
def solution(friends, gifts):
n = len(friends)
present_dict = {}
arr = [[0]*n for _ in range(n)]
give_take = [[0, 0] for _ in range(n)]
future = [0] * (n)
for i in range(len(friends)):
present_dict[friends[i]] = i
for ar in gifts:
A, B = ar.split()
a_num = present_dict[A]
b_num = present_dict[B]
arr[b_num][a_num] += 1
give_take[a_num][1] += 1
give_take[b_num][0] += 1
for i in range(n-1):
for j in range(i+1, n, 1):
if arr[i][j] > arr[j][i]:
future[j] += 1
elif arr[i][j] < arr[j][i]:
future[i] += 1
else:
i_num = give_take[i][1] - give_take[i][0]
j_num = give_take[j][1] - give_take[j][0]
if i_num > j_num:
future[i] += 1
elif i_num < j_num:
future[j] += 1
max_val = max(future)
#print(future)
#print(present_dict)
#print(arr)
#print(give_take)
return max_val
728x90
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 2025/01/16] 완주하지 못한 선수 (1) | 2025.01.16 |
---|---|
[프로그래머스 2024/06/17] 단어 변환 - python (0) | 2024.06.17 |
[프로그래머스 2024/01/29] 오프라인/온라인 판매 데이터 통합하기 (0) | 2024.01.29 |
[프로그래머스 2024/01/26] 상품 별 오프라인 매출 구하기 (1) | 2024.01.26 |
[프로그래머스 2024/01/26] 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 (0) | 2024.01.26 |