https://school.programmers.co.kr/learn/courses/30/lessons/258712
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
구현 문제였습니다.
📕 풀이방법
📔 입력 및 초기화
1. 정답 변수 answer
2. 선물을 준 사람명, 준 대상의 목록을 각각 key와 value로 지정할 변수 gave_gift_dict
3. 선물을 받은 사람명, 받은 대상의 목록을 각각 key와 value로 지정할 변수 take_gift_dict
4. 사람명과 선물 지수를 각각 key, value로 저장할 gift_index
5. 다음달에 받는 사람과 받는 선물 수를 각각 key value로 get_gift_graph
를 선언해주고 중복으로 선물받지 않기위해 checked를 선언 후 friends의 원소를 순회하며 적절히 초기화해줍니다.
📔 풀이과정
1. gifts의 원소를 순회하며 다음을 진행합니다.
1-1. 각 원소별 공백으로 구분해 split한 정보를 splited_g에 저장합니다.
1-2. 첫 번째 원소는 준 사람명, 두 번째는 준 대상명이므로 준 사람과 받은 대상을 각각 gave_gift_dict, take_gift_dict에 저장해줍니다.
2. friends에 대해 순회하며 특정 사람이 준 선물개수 - 받은 선물개수를 수행해 선물지수를 저장합니다.
3. friends에 대해 2차원 for loop를 수행하며 다음을 진행합니다.
3-1. f1, f2의 checked여부를 검사해 False라면 continue해줍니다.
3-2. f1이 f2에게 준 선물 개수와 f1이 f2에게 받은 선물 개수를 구해 각각 give_count, take_count에 저장해줍니다. 3-3. f1이 f2에게 준 선물 개수가 받은 개수보다 많다면 f1이 선물을 받아줍니다. 아니라면 선물 교환한 적이 없거나 동일한 선물을 교환했으므로 선물지수를 비교해 f1이 더 크다면 f1이 선물을 받아줍니다.
4. get_gift_graph를 순회하며 가장 많이 받은 선물 개수를 구해 answer에 저장합니다.
📔 정답 출력 | 반환
answer를 반환합니다.
📕 Code
📔 Python3
def solution(friends, gifts):
answer = 0
gave_gift_dict = {}
take_gift_dict = {}
gift_index = {}
get_gift_graph = {}
checked = {}
for f in friends:
gave_gift_dict[f] = []
take_gift_dict[f] = []
gift_index[f] = 0
get_gift_graph[f] = 0
for f1 in friends:
checked[f1] = {}
for f2 in friends:
checked[f1][f2] = False
for g in gifts:
splited_g = g.split()
gave_gift_dict[splited_g[0]].append(splited_g[1])
take_gift_dict[splited_g[1]].append(splited_g[0])
for f in friends:
gift_index[f] = len(gave_gift_dict[f]) - len(take_gift_dict[f])
for f1_name in friends:
for f2_name in friends:
if checked[f1_name][f2_name]:
continue
checked[f1_name][f2_name] = True
#f1이 f2에게 선물준 개수
give_count = gave_gift_dict[f1_name].count(f2_name)
#f2가 f1에게 선물준 개수
take_count = take_gift_dict[f1_name].count(f2_name)
# f1이 f2에게 선물준 개수가 더 많으면
if give_count > take_count:
get_gift_graph[f1_name] += 1
elif give_count == take_count:
if gift_index[f1_name] > gift_index[f2_name]:
get_gift_graph[f1_name] += 1
for _, count in get_gift_graph.items():
answer = max(answer,count)
return answer
*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.
'Algorithm > Implementation' 카테고리의 다른 글
(Python3) - 프로그래머스(연습문제) : 숫자 짝꿍 (0) | 2024.11.05 |
---|---|
(Python3) - 프로그래머스(PCCE 기출문제) : 8번 / 닉네임 규칙 (0) | 2024.11.05 |
(Python3) - 프로그래머스(코딩테스트 입문) : 안전지대 (0) | 2024.11.03 |
(Python3) - 프로그래머스(코딩테스트 입문) : 저주의 숫자 3 (1) | 2024.11.03 |
(Python3) - 프로그래머스(코딩테스트 입문) : 외계어 사전 (0) | 2024.11.03 |