잡다로그

[Python/코테] 2024 Kakao Winter Internship - 1. 가장 많이 받은 선물 본문

Algorithm

[Python/코테] 2024 Kakao Winter Internship - 1. 가장 많이 받은 선물

날으는다람쥐 2024. 3. 26. 15:55

문제 링크: https://school.programmers.co.kr/learn/challenges?order=recent&page=1&partIds=58464

 

코딩테스트 연습 | 프로그래머스 스쿨

개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!

school.programmers.co.kr


#1 가장 많이 받은 선물

알고리즘 설계

💡idea.

가능한 경우의 수(최대 사람 수)가 많지 않고, 하나씩 비교가 필요 구현 문제라고 판단.

 

🐧해설 참고

https://tech.kakao.com/2023/12/27/2024-coding-test-winter-internship/

 

2024 카카오 겨울 인턴십 코딩테스트 문제해설

안녕하세요, 카카오에서 계정시스템 개발을 맡고 있는 잭입니다.2024 카카오 채용 연계형 겨울 인턴십 코딩 테스트가 지난 11월 25일(토)에 5시간에 걸쳐 진행되었습니다. 문제를 이해하면 쉽게 해

tech.kakao.com

알고리즘 구현

def solution(friends, gifts):
    answer = 0
    figure = []
    send_gift = {}
    result = {}

    for name in friends:
        # {'muzi': [0, 0, 0, 0, 0], ...}
        send_gift[name] = [0 for _ in range(len(friends))]
        figure = [0 for _ in range(len(friends))]
        result = [0 for _ in range(len(friends))]

    for i in range(len(gifts)):
        sender, receiver = gifts[i].split()
        send_gift[sender][friends.index(receiver)] += 1

        figure[friends.index(sender)] += 1
        figure[friends.index(receiver)] -= 1

    # 선물 교환 기록 비교
    for i in range(len(friends)):
        sender = friends[i]
        for k in range(len(friends)):
            receiver = friends[k]
            if i == k:  # 본인은 넘어감
                continue

            # 이중 for문이므로
            # 받을 경우만 계산!
            if send_gift[receiver][i] < send_gift[sender][k]:
                result[i] += 1
            # 선물을 주고받은 기록이 하나도 없거나(0으로 같다) 주고받은 수가 같다
            elif send_gift[receiver][i] == send_gift[sender][k]:
                if figure[i] > figure[k]:
                    result[i] += 1
                    
    answer = max(result)
    return answer

 

나다어

  • 튜플, 사전 등의 파이썬 자료형을 잘 알아두자.
  • 큼직하게 경우를 나누고 세부 경우의 수를 고려해야 한다. 큰 틀이 없으면 아무것도 안됨 !
Comments