2024 코딩테스트 문제풀이 1

이진수·2024년 7월 17일
0

프로그래머스

목록 보기
7/7

가장 많이 받은 선물

https://school.programmers.co.kr/learn/courses/30/lessons/258712

나의 풀이

from collections import Counter


def initialize(friends):
    gift_info_dict = {}
    for target in friends:
        gift_info_dict.update({
            target: {
                "send": [],
                "give": [],
                "value": 0,
            }
        })
    return gift_info_dict

def make_gift_form(gifts, data):
    for i in gifts:
        i = i.split(" ")
        sender = i[0]
        giver = i[1]

        # 선물 보낸 처리
        data.get(sender).get("send").append(giver)
        data.get(sender).update({
            "value": data.get(sender).get('value') + 1
        })
        
        # 선물 받은 처리
        data.get(giver).get("give").append(sender)
        data.get(giver).update({
            "value": data.get(giver).get('value') - 1
        })

    return data

def cal_result(friends, gift_data):
    value_list = []
    for k, v in gift_data.items():
        value = 0
        send_cnt = Counter(gift_data[k]['send'])
        gict_cnt = Counter(gift_data[k]['give'])

        for friend in friends:
            if k != friend:
                if send_cnt[friend] - gict_cnt[friend] == 0:
                    # 서로 동일하게 선물을 주고 받은 경우 선물지수로 체크
                    # 서로 주고 선물을 주고 받은 적이 없는 경우 선물지수로 체크
                    if v['value'] > gift_data[friend]['value']:
                        value += 1
                elif send_cnt[friend] > gict_cnt[friend]:
                    value += 1
        
        value_list.append(value)
      
    return max(value_list)
    

def solution(friends, gifts):
    gift_info_dict = initialize(friends=friends)
    gift_data = make_gift_form(gifts=gifts, data=gift_info_dict)
    return cal_result(friends=friends, gift_data=gift_data)

문제 풀이 후기

오랜만에 코테문제를 풀어서 생각보다 시간이 오래 걸렸습니다.
가능한 함수화하여 코드 가독성을 높이려고 코드를 짰습니다.

처음에 initialize 를 통해서 초기변수를 만들어 주고, make_gift_form 을 통해서 선물을 주고받은 데이터 폼 양식을 만들어 줬습니다.

이 과정에서 어떻게 구현해야 할지 고민을 많이 했습니다.

추후 cal_result 하는 부분에서 카운터를 사용하여 처리 했는데 이 과정까지 전부 make_gift_form 부분에서 처리 하려 했으나 함수 1개에 1개의 기능을 넣는 것이 가독성 면에서 더 좋다고 생각해서 별도로 cal_result 부분에서 처리 하게 됐습니다.

제 기준으로 다행히 못 풀 정도는 아니었지만 역시나 카카오 코테는 어려운 편인 것 같습니다 ㅎㅎ

profile
Python, Django, Flask, MySQL, AWS, Algorythm

0개의 댓글

관련 채용 정보