안녕하세요, 대장코린이입니다.
저는 가끔 프로그래머스에서 카카오 코딩테스트 문제를 풀어봅니다.
풀다보니 며칠만 지나도 어떻게 짯던거지? 하고 까먹어서 기록겸... 작성을 해보려합니다.
https://school.programmers.co.kr/learn/courses/30/lessons/258712
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짜리 코딩테스트 문제여서 어렵진 않습니다.
입출력 설명에서 설명도 되게 자세히 해주고... 번뜩이는 아이디어가 필요하거나 하진 않은 문제입니다.
그저 문제 설명만 차근차근 따라 구현해주면 풀 수 있습니다!
앞으로는 코테 문제도 조금씩 올려볼게요~