새로운 블로그로 이전 작업을 진행하고 있어 포스트가 새로 작성되고 있지 않습니다.

빠른 시일 내에 새로운 블로그로 인사드리겠습니다.

새로운 블로그 : https://unho.vercel.app/

본문 바로가기
알고리즘 문제풀이/Python

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

by 언호 2022. 3. 14.

📖 문제


🧑🏻‍💻 풀이 과정

1) 문제 이해 및 접근

재귀로 높은 점수부터 시작하여 탐색하였습니다.

각 점수는 이길때는 딱 한발만 더 쏘도록 하였고, 질때는 한발도 쏘지 않도록 하였습니다.

2) 알고리즘

  • 재귀

3) 풀이 코드

사용 언어 - Python

def solution(n, info):
    answer = []                 # 점수 받는 정답 리스트
    max_difference = 0          # 가장 많이 차이 나는 점수차

    def sol(idx, remain, apeach, ryan, ans):                            # 인덱스, 남은 화살 수, 어피치 점수, 라이언 점수, 점수별 라이언이 쏜 화살 수
        nonlocal answer, max_difference

        if idx > 10 and remain >= 0:                                    # 모두 반복했고, 화살이 남거나 다 쐈을때
            if max_difference <= ryan - apeach:                         # 점수차 최대 이상일때
                if max_difference < ryan - apeach:                      # 점수차 새로 갱신시 기존에 기록한 정답 리스트 초기화
                    answer.clear()       
                if remain:                                              # 화살이 모두 남아있을때 모두 0점에 쏜것으로 처리
                    ans[-1] += remain                            
                max_difference = ryan - apeach                          # 점수차 새로 기록
                answer.append(ans)                                      # 정답에 추가
            return
        elif remain < 0:                                                # 화살 쏜 횟수 초과시 그냥 종료
            return

        sol(idx+1, remain-info[idx]-1, apeach, ryan+(10-idx), ans+[info[idx]+1])        # 이번 점수 이길때
        sol(idx+1, remain, apeach+(10-idx) if info[idx] else apeach, ryan, ans+[0])     # 이번 점수 질때

    sol(0, n, 0, 0, [])                                                 # 탐색 시작

    answer = sorted(answer, key=lambda x: list(x[k] for k in range(10, -1, -1)))        # 가장 마지막에 쏜 화살이 적은 순으로 정렬

    return answer[-1] if max_difference else [-1]

📝 결과 및 학습한 내용

1) 어려웠던 내용

특별히 없습니다.

2) 새롭게 학습한 내용

특별히 없습니다.


🔗 문제 링크

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

 

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

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

programmers.co.kr

 

 

※ 오류 및 오타, 다른 의견이 있는 경우 댓글을 남겨주시면 감사하겠습니다

'알고리즘 문제풀이 > Python' 카테고리의 다른 글

[프로그래머스] 구명보트  (0) 2022.03.16
[프로그래머스] 캐시  (0) 2022.03.15
[백준] 2644 촌수계산  (0) 2022.03.13
[백준] 1051 숫자 정사각형  (0) 2022.03.11
[프로그래머스] 괄호 변환  (0) 2022.03.10

댓글