[Programmers] Level 2. 양궁대회

2025. 1. 31. 21:20·코딩테스트/Python
728x90
반응형

🔗 Problem Link

 

프로그래머스

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

programmers.co.kr


❔Thinking

  • 가장 큰 점수 차이로 상대를 이기는 경우를 반환하고, 불가능하다면 -1을 반환한다.
  • 총 N발의 화살이 주어지고, 상대보다 해당 점수에 더 많은 화살을 맞혀야 해당 점수를 가져올 수 있다.
  • 점수차 같은 경우에는, 더 적은 점수에 화살을 쏜 경우를 반환한다.

💻Solution

def solution(n, info):
    
    # 해당 점수를 획득 한다 or 못한다
    def get_score(arrow:int, targets:list, now_target:int):
        if now_target == 10 or arrow == 0:
            nonlocal score_diff, answer
            if arrow > 0:
                targets[-1] += arrow
            a, l = 0, 0
            for i in range(11):
                if (info[i] > 0) and (info[i] >= targets[i]):
                    a += 10-i
                elif (targets[i] > 0) and (targets[i] - info[i] > 0):
                    l += 10-i
            if l - a > 0:
                if (l - a > score_diff) or (l - a == score_diff and targets[::-1] > answer[::-1]):
                    score_diff = l-a
                    answer[:] = targets
            targets[-1] -= arrow
            return
        
        # 이긴다 = 해당 점수에 화살을 쏜다
        if arrow >= info[now_target]+1:
            targets[now_target] += info[now_target]+1
            arrow -= info[now_target]+1
            get_score(arrow, targets, now_target+1)
            arrow += info[now_target]+1
            targets[now_target] -= info[now_target]+1
        
        # 진다 = 해당 점수에 쏘지 않고 다음 점수로 넘어간다
        get_score(arrow, targets, now_target+1)
        
    answer = [-1]
    score_diff = 0
    get_score(n, [0 for _ in range(11)], 0)
    
    return answer

🗝️keypoint

  1. 0부터 10점까지의 과녁이 있기 때문에, 각 점수를 얻는다 or 얻지 못한다로 구분지어 생각할 수 있다.
  2. 재귀 함수로 변수들을 넘길때는, 더하거나 빼는 등의 행위는 반드시 원상복구 시켜야 한다.
저작자표시 (새창열림)

'코딩테스트 > Python' 카테고리의 다른 글

[Programmers] Level 2. 3xn 타일링  (0) 2025.02.05
[Baekjoon] 1062. 가르침  (0) 2025.02.02
[Baekjoon] 1025. 제곱수 찾기  (0) 2025.01.30
[Programmers] Level 2. 혼자 놀기의 달인  (0) 2025.01.28
[Baekjoon] 1202. 보석 도둑  (0) 2025.01.28
'코딩테스트/Python' 카테고리의 다른 글
  • [Programmers] Level 2. 3xn 타일링
  • [Baekjoon] 1062. 가르침
  • [Baekjoon] 1025. 제곱수 찾기
  • [Programmers] Level 2. 혼자 놀기의 달인
swwho
swwho
일상을 데이터화하다
  • swwho
    하루한장
    swwho
  • 전체
    오늘
    어제
    • 분류 전체보기 (188)
      • ML_DL (39)
        • MUJAKJUNG (무작정 시리즈) (18)
        • 딥러닝 공부하기 (21)
      • 데이터사이언스 (1)
        • EDA (1)
        • 데이터과학을 위한 통계 (0)
      • 데이터엔지니어링 (2)
      • 논문리뷰 (2)
        • Computer Vision (2)
      • Python 활용하기 (12)
      • 코딩테스트 (127)
        • Python (109)
        • MySQL (14)
      • Git (3)
      • MySQL 활용하기 (0)
      • 일상 이야기 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
swwho
[Programmers] Level 2. 양궁대회
상단으로

티스토리툴바