본문 바로가기

개발/algorithm

[프로그래머스][level2] 양궁 대회 -python

문제 링크

https://programmers.co.kr/learn/courses/30/lessons/92342

 

코딩테스트 연습 - 양궁대회

문제 설명 카카오배 양궁대회가 열렸습니다. 라이언은 저번 카카오배 양궁대회 우승자이고 이번 대회에도 결승전까지 올라왔습니다. 결승전 상대는 어피치입니다. 카카오배 양궁대회 운영위원

programmers.co.kr

 

풀이 

- 중복 조합 사용 

- Counter 함수 : 주어진 배열에 등장하는 알파벳을 key, 그것의 개수를 value로 하는 딕셔너리 반환 

from itertools import combinations_with_replacement
from collections import Counter

def solution(n, info):
  # 가장 큰 차이 
  max_result = 0
  # 가장 큰 차이가 날 때의 조합 
  max_combine = {}
  # 중복 조합 
  combine = list(combinations_with_replacement(range(11),n))
  
  for num in combine:
    cnt = Counter(num)
    # s1는 라이언 점수, s2는 어피치 점수 
    s1, s2 = 0,0
    for i in range(1,11):
      # 쏜 개수가 더 많으면 라이언 점수 더하기 
      if info[10-i] < cnt[i]:
        s1 += i 
      # 어피치가 더 많이 쐈으면 어피치 점수 더하기 
      elif info[10-i] > 0 :
        s2 += i 
    
    # 두 명의 점수차
    result = s1 - s2
    # 최대 점수차이면 갱신 
    if result > max_result:
      max_combine = cnt
      max_result = result 

  if max_result > 0:
    answer =[0] * 11
    for i in max_combine:
      answer[10-i] = max_combine[i]
    return answer 
  else:
    return [-1]