TIL - 프로그래밍/Python 알고리즘
[프로그래머스] Lv.2 양궁대회 - Python
chaemj97
2022. 6. 16. 23:23
728x90
https://programmers.co.kr/learn/courses/30/lessons/92342
코딩테스트 연습 - 양궁대회
문제 설명 카카오배 양궁대회가 열렸습니다. 라이언은 저번 카카오배 양궁대회 우승자이고 이번 대회에도 결승전까지 올라왔습니다. 결승전 상대는 어피치입니다. 카카오배 양궁대회 운영위원
programmers.co.kr
- 생각
- 라이언이 쏠 과녁 수 최대가 10이니 라이언이 과녁 쏘는 경우의 수 모두 완탐..
- from itertools import combinations_with_replacement : 중복조합
- 완탐 해도 시간초과 안 날지 걱정
- 예제 3번의 라이언이 과녁 쏘는 경우의 수 약 18만....
- 걱정되었지만 다른 방법 생각 안나서 진행함
- 라이언이 쏠 수 있는 각 경우의 수에서
- 점수계산 후 갱신
- 라이언이 쏠 과녁 수 최대가 10이니 라이언이 과녁 쏘는 경우의 수 모두 완탐..
- 코드
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
반응형