풀이
이번 달 까지의 선물을 주고받은 기록과 선물 지수를 토대로 다음달에 선물을 많이 받는 사람을 예측하는 문제다.
문제에서 주어진 조건은 다음과 같다.
1. 선물 기록이 있다면 더 많은 선물을 준 사람이 선물을 받는다.
2. 선물 기록이 없거나 같다면, 선물 지수가 더 큰사람이 받는다.
선물 지수는 이번 까지 자신이 친구들에게 준 선물 수에서 받은 선물 수를 뺀 값이다.
즉, 받은것보다 준 횟수가 더 많다면 선물 지수는 높아진다.
먼저 3개의 dict을 만들어 주자.
각각 선물을 주고받은 기록( gift_history ), 선물 지수( gift_level ), 다음 달에 받을 선물 수( give )이다.
gift_history의 경우 여러명으로부터 여러개의 선물을 받기 때문에 중첩 구조로 구성하자.
참고로 문제에서 자기 자신에게 선물을 주는 경우는 없다고 명시되어 있다.
이제 누가 누구에게 선물을 주는지에 대한 관계가 완성되었다.
이를 바탕으로 몇개의 선물을 주었고, 개인의 선물 지수는 몇인지 계산해주자.
선물을 준 사람은 선물지수를 +1, 선물을 받은 사람은 -1을 하면 된다.
이제 문제에서 언급한 조건대로 다음달에 받을 선물 수를 계산하면 된다.
선물 기록이 없거나, 같은 경우는 단순하게 주고받은 선물 수가 같은지( gift_history[me][other] == gift_history[other][me] ) 비교하면 된다.
현재 탐색 대상( me )를 기준으로 받을 선물 수만 구하면 되는 문제다.
선물을 주는 경우는 고려하지 않아도 된다. 따라서 선물 지수가 큰 경우에만 받을 선물의 수를 증가시켜 주자.
다음으로는 선물 기록이 있는 경우다. 선물을 0개 받은 대상이더라도 선물을 준 기록이 있고, 선물 지수가 상대방보다 높다면 선물을 받을 수 있다.
이제 각 개인이 받을 선물 수 중 최댓값을 반환하면 된다.
소스코드
출처
후기
프로그래머스에 있는 카카오 문제를 처음 풀어봤다.
한번에 맞추긴 했지만 난이도가 LV. 1은 아닌 듯하다.
'PS' 카테고리의 다른 글
[코드트리] 최고의 33위치 [C/C++] for 코드트리 조별과제 (0) | 2024.07.21 |
---|---|
[2024 KAKAO WINTER INTERNSHIP] 도넛과 막대 그래프 [Python] (0) | 2024.06.22 |
[구름톤 챌린지] 17일차 - 통신망 분석 (0) | 2023.09.10 |
[구름톤 챌린지] 16일차 - 연합 [Python] (0) | 2023.09.06 |
[구름톤 챌린지] 15일차 - 과일구매 [Python] (0) | 2023.09.02 |