본문 바로가기
TIL - 프로그래밍/Python 알고리즘

[프로그래머스] Lv.2 양궁대회 - Python

by chaemj97 2022. 6. 16.
728x90

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

 

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

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

programmers.co.kr


  • 생각
    • 라이언이 쏠 과녁 수 최대가 10이니 라이언이 과녁 쏘는 경우의 수 모두 완탐..
      • from itertools import combinations_with_replacement : 중복조합
    • 완탐 해도 시간초과 안 날지 걱정
    • 예제 3번의 라이언이 과녁 쏘는 경우의 수 약 18만....
    • 걱정되었지만 다른 방법 생각 안나서 진행함
      • 라이언이 쏠 수 있는 각 경우의 수에서
      • 점수계산 후 갱신
  • 코드
from itertools import combinations_with_replacement

def solution(n, info):
    # 라이언이 쏠 수 있는 모든 경우
    result = [-1]
    max_score_dif = 0
    
    for i in list(combinations_with_replacement(range(0,11),n)):
        # 라이언 과녁
        rion = [0]*11
        for j in i:
            rion[j] += 1
        rion = rion[::-1]
        rion_score = 0
        apeach_score = 0
        
        # 라이언 어피치 점수 계산
        for n in range(0,11):
            if rion[n] > info[n]:
                rion_score += 10-n
            elif info[n]:
                apeach_score += 10-n
                
        # 라이언이 이겼고(점수차가 양수), 점수차가 이전 경우보다 크다면
        score_dif = rion_score - apeach_score
        if score_dif > max_score_dif:
            # 가장 낮은 점수를 더 많이 맞힌 경우가 result -> 뽑을 때 작은 것부터 뽑아서 자동으로 됨
            max_score_dif = score_dif
            result = rion
        
    return result
728x90
반응형

댓글