카카오배 양궁대회가 열렸습니다.
라이언
은 저번 카카오배 양궁대회 우승자이고 이번 대회에도 결승전까지 올라왔습니다. 결승전 상대는 어피치
입니다.
카카오배 양궁대회 운영위원회는 한 선수의 연속 우승보다는 다양한 선수들이 양궁대회에서 우승하기를 원합니다. 따라서, 양궁대회 운영위원회는 결승전 규칙을 전 대회 우승자인 라이언에게 불리하게 다음과 같이 정했습니다.
n
발을 다 쏜 후에 라이언이 화살 n
발을 쏩니다.현재 상황은 어피치가 화살 n
발을 다 쏜 후이고 라이언이 화살을 쏠 차례입니다.
라이언은 어피치를 가장 큰 점수 차이로 이기기 위해서 n
발의 화살을 어떤 과녁 점수에 맞혀야 하는지를 구하려고 합니다.
화살의 개수를 담은 자연수 n
, 어피치가 맞힌 과녁 점수의 개수를 10점부터 0점까지 순서대로 담은 정수 배열 info
가 매개변수로 주어집니다. 이때, 라이언이 가장 큰 점수 차이로 우승하기 위해 n
발의 화살을 어떤 과녁 점수에 맞혀야 하는지를 10점부터 0점까지 순서대로 정수 배열에 담아 return 하도록 solution 함수를 완성해 주세요. 만약, 라이언이 우승할 수 없는 경우(무조건 지거나 비기는 경우)는 [-1]
을 return 해주세요.
from itertools import combinations_with_replacement
def solution(n, info):
answer = [-1]
max_gap = -1 # 최대 점수 차이 갱신
# [0 ~ 10점 중복 조합 계산]
# k점을 어피치가 a발, 라이언이 b발 맞혔을 경우 더 많은 화살을 k점에 맞힌 선수가 k점을 가져간다.
# a = b일 경우 어피치가 k점을 가져간다.
# a = b = 0일 경우 아무도 안 가져간다
# info의 i번째 원소 : (10 - i)점, ex) 0번째 : 10점
for score in combinations_with_replacement(range(11), n):
case = [0] * 11
for s in score:
case[10 - s] += 1
apeach = 0
lion = 0
for idx in range(11):
if info[idx] == case[idx] == 0:
continue
if info[idx] >= case[idx]:
apeach += 10 - idx
else:
lion += 10 - idx
if lion > apeach:
temp = lion - apeach
if temp > max_gap:
answer = case
max_gap = temp
return answer