[프로그래머스 Lv2.] 양궁 대회(python)

1. 문제

문제 설명

제한사항

입출력 예시

입출력 예 설명


2. 풀이 과정

내가 생각한 진행 과정

  • 우선 중복조합(combinations_with_replacement)을 이용해 lion이 점수낼 수 있는 모든 경우를 뽑아내기
  • 하나하나 돌아가면서 info처럼 lion의 경우를 리스트로 표현
  • 라이언 점수랑 어피치 점수 비교하기
    • a = b일 경우는 어피치가 k점을 가져감
    • k점을 여러 발 맞혀도 k점 보다 많은 점수를 가져가는 게 아니고 k점만 가져감
    • 또한 a = b = 0 인 경우, 누구도 k점을 가져가지 않음
  • 라이언이 어피치보다 점수가 높다면 answer을 lion_now로 바꿔주는데, 이때, 라이언이 어피치와 가장 큰 점수 차이로 이겨야하기때문에, mymax를 이용해 가장 큰 점수차이를 갱신해줘야함
  • 라이언이 우승할 수 없다면, answer가 갱신되지 않고 처음값인 []를 끝까지 가지고있을 것이므로 마지막에 answer가 []이면 [-1]을 리턴해야함

최종 코드

from itertools import combinations_with_replacement

def solution(n, info):
    answer = []
    mymax = 0
    for temp in list(combinations_with_replacement(range(0, 11), n)):
        lion_now = [0 for _ in range(11)]
        for t in temp:
            lion_now[10 - t] += 1

		# 라이언 점수랑 어피치 점수 비교함
        lion = 0
        apeach = 0
        for i in range(11):
            l, a = lion_now[i], info[i]

            if l == a == 0:
                continue
            if l > a:
                lion += (10 - i)
            else:
                apeach += (10 - i)

        if lion > apeach:
            if mymax < (lion - apeach):
                mymax = lion - apeach
                answer = lion_now

    if answer == []:
        return [-1]
    return answer

다른 풀이 방법

좋은 웹페이지 즐겨찾기