chyam

[프로그래머스 Lv2, python] - 양궁대회 본문

프로그래머스/LV2

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

chyam_eun 2025. 5. 9. 11:21

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

def solution(n, info):
    res_list = []
    max_diff = 0
    max_res = [-1]

    def dfs(n, res, i):
        nonlocal max_diff, max_res  # 먼저 nonlocal 선언

        # 화살을 다 쓰거나 모든 점수를 탐색한 경우
        if n == 0 or i == 11:
            res[10] += n  # 남은 화살을 모두 0점에 넣음
            sum_ap, sum_ri = 0, 0
            
            # 점수 계산
            for j in range(11):
                if info[j] == 0 and res[j] == 0:
                    continue
                if res[j] > info[j]:
                    sum_ri += 10 - j
                else:
                    sum_ap += 10 - j
            
            # 점수 차이 비교 및 결과 저장
            diff = sum_ri - sum_ap
            if sum_ri > sum_ap:
                if diff > max_diff:
                    max_diff = diff
                    max_res = res[:]
                elif diff == max_diff:
                    # 사전순으로 더 큰 것을 선택
                    if res[::-1] > max_res[::-1]:
                        max_res = res[:]
            return
        
        # 현재 점수를 얻는 경우
        if n > info[i]:
            new_res = res[:]
            new_res[i] = info[i] + 1
            dfs(n - new_res[i], new_res, i + 1)
        
        # 현재 점수를 얻지 않는 경우
        dfs(n, res[:], i + 1)

    dfs(n, [0] * 11, 0)
    return max_res