카테고리 없음

[Python,코테] 2024 KAKAO WINTER INTERNSHIP - 가장 많이 받은 선물

대장코린이 2024. 5. 2. 14:18

안녕하세요, 대장코린이입니다.

저는 가끔 프로그래머스에서 카카오 코딩테스트 문제를 풀어봅니다.

 

풀다보니 며칠만 지나도 어떻게 짯던거지? 하고 까먹어서 기록겸... 작성을 해보려합니다.

 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 


1. 문제 설명

오늘 설명드릴 문제는 "가장 많이 받은 선물"인데요.

문제 내용은 아래와 같습니다.

 

문제 설명

 

입출력 예제 설명

 


2. 내 코드

import pandas as pd
import numpy as np
from itertools import combinations


def solution(friends, gifts):
    df = pd.DataFrame(index=friends,columns =friends)
    df[:] = 0
    df2 = [0 for i in range(len(friends))]
    df2 = dict(list(zip(friends,df2)))
    df3 = df.copy()
    ans = df2.copy()
    
    combi = list(combinations(friends,2))
    
    for s in gifts:
        msg  =s.split(' ')
        df.loc[msg[1],msg[0]] += 1
        df2[msg[0]] += 1
        df2[msg[1]] -= 1
    
    ndf = np.triu(df-df.T).T
    df3[:] = ndf.T
    for a,b in combi:
        #print(df3.loc[a,b])
        if df3.loc[a,b] > 0:
            ans[b] += 1
        elif df3.loc[a,b] < 0:
            ans[a] += 1
        else:
            if df2[a] < df2[b]:
                ans[b] += 1
            elif df2[a] > df2[b]:
                ans[a] += 1
            else:
                continue
        
    return max(ans.values())

 

저는 먼저 입출력 예처럼 데이터 프레임을 통해 똑같은 형태로 만드려고 했습니다.

저도 예전에 작성했던거라 세세한 부분은 잘 기억이 나질 않네요... 이제 문제를 풀자마자 바로 블로그를 작성해야할 것 같습니다...

 

아무튼.. combination을 사용하여 친구들의 조합을 계산해줍니다.

순서쌍을 모두 만들었으면, for문으로 반복하며 데이터 프레임을 만들어줍니다.

데이터 프레임을 모두 만들어주었다면 결과를 저장할 데이터프레임을 만들어 준 후 조건에 맞게  각각 선물을 받을 사람에게 +1씩 추가해줍니다.

 

사실 레벨 1짜리 코딩테스트 문제여서 어렵진 않습니다.

입출력 설명에서 설명도 되게 자세히 해주고... 번뜩이는 아이디어가 필요하거나 하진 않은 문제입니다.

그저 문제 설명만 차근차근 따라 구현해주면 풀 수 있습니다!

 

앞으로는 코테 문제도 조금씩 올려볼게요~