honey_pot

[Python] 양궁대회 본문

문제 풀이

[Python] 양궁대회

_tera_ 2022. 9. 20. 23:40

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


itertools의 combinations_with_replacement를 알게 된 문제

 

combinations_with_replacement는 combinations와 다르게

튜플이 AB인 경우 AA, AB, BB 처럼 요소의 반복을 허용하고 정렬된 순서로 나오기 때문에

문제가 원하는 대로 가장 작은 점수부터 채워져서 나온다

 

2단계 시작 때는 문제부터 이해 안 갔는데 이번엔 그래도 시도는 해봤다 다음에 다시 풀어봐야지

찾아보니 dfs로도 풀던데 n이 클때는 조합을 만들때 시간 초과가 뜰테니 dfs 방식이 유용할 것 같다

 

어피치와 라이언의 점수를 비교하는 부분에서 더 복잡하게 짰었는데 zip을 이용하면 직관적이고 편하다

[-1]을 리턴하는 조건도 answer가 존재하면 answer를, 존재하지 않으면 [-1]을 리턴하는 코드로 작성했는데

처음부터 [-1]로 초기화하면 코드 수도 줄고 한 눈에 딱 들어온다. 역시 남의 코드는 똑똑하다

-> 참고 : https://ye0nn.tistory.com/18

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from itertools import combinations_with_replacement as cwr
 
def solution(n, info):
    answer = [-1]
    maxgap = float('-inf')
    
    for combi in cwr(range(0,11),n):
        apeach, ryan = 0,0
        r_info = [0]*11
        
        for score in combi:
            r_info[10-score] += 1
        
        for score, (a, r) in enumerate(zip(info, r_info)):
            if a == r == 0:
                continue
            elif a >= r:
                apeach += (10 -score)
            else:
                ryan += (10-score)
        if ryan > apeach :
            gap = ryan-apeach
            if gap > maxgap:
                maxgap = gap
                answer = r_info
    return answer
cs

'문제 풀이' 카테고리의 다른 글

[Python] 쿼드압축 후 개수 세기  (0) 2022.09.21
[Python] 2개 이하로 다른 비트  (1) 2022.09.21
[Python] 점프와 순간 이동  (0) 2022.09.20
[Python] [3차] 압축  (0) 2022.09.20
[python] k진수에서 소수 개수 구하기  (0) 2022.09.18
Comments