프로그래머스
2022 KAKAO BLIND RECRUITMENT
양궁대회
import itertools
from itertools import combinations_with_replacement
import copy
def combination_iter(r_list,n):
com_list=list(combinations_with_replacement(r_list,r=n))
return com_list
def calScore(arr2,arr3):
score1=range(11)
score1=score1[::-1]
a_score=0
b_score=0
diff1=0
for i in range(len(arr2)):
if arr2[i]>arr3[i]:
a_score+=score1[i]
elif arr2[i]<=arr3[i] and arr3[i]>0:
b_score+=score1[i]
if a_score-b_score>0:
diff1=a_score-b_score
return diff1
else:
return diff1
def compArr(arr,arr1):
#print("compare : "+str(arr)+" , "+str(arr1))
for i in range(len(arr)-1,-1,-1):
if arr[i]>arr1[i]:
#print("change : "+str(arr)+" , "+str(arr1)+" "+str(i))
return arr
elif arr[i]<arr1[i]:
return arr1
elif arr[i]==arr1[i]:
continue
#print("last : "+str(arr)+" , "+str(arr1))
return arr1
def solution(n, info):
answer = []
max1=0
arr=[]
for idx in range(len(info)):
if len(arr) == 0:
if info[idx]<n:
tmp=[]
tmp.append(info[idx]+1)
arr.append(tmp)
arr.append([0])
else:
arr.append([0])
elif idx==len(info)-1:
arr_copy=copy.deepcopy(arr)
arr_tmp=[]
for c in arr_copy:
sum_list=sum(c)
left=n-sum_list
c.append(left)
arr_tmp.append(c)
arr=arr_tmp
else:
arr_copy=copy.deepcopy(arr)
arr_tmp=[]
for c in arr_copy:
sum_list=sum(c)
left=n-sum_list
if left > 0 and info[idx] < left:
c_copy=copy.deepcopy(c)
c_copy.append(info[idx]+1)
arr_tmp.append(c_copy)
c.append(0)
arr_tmp.append(c)
else:
c.append(0)
arr_tmp.append(c)
arr=arr_tmp
for score_tb in arr:
diff = calScore(score_tb,info)
if max1 < diff:
max1=diff
answer=score_tb
elif max1==diff and diff!=0:
#print(answer)
answer=compArr(answer,score_tb)
#print(answer)
return answer if len(answer) > 0 else [-1]
조합, 순열, 중복조합, 중복순열
dfs,bfs
자주 나오는 알고리즘에 대해 확실히 알아두자.