본문 바로가기

PS

양궁대회 2 [2022 KAKAO BLIND RECRUITMENT]

1. 문제 접근 방법

- 양궁 대회 문제를 다시 풀어봤다

-> 이전보다 좀 더 효율적으로 코드를 작성했던 것 같다

- 단, gap이 같은 경우에 비교할 때는, 원소를 하나씩 비교하도록 하자.

-> 하나씩 비교하는 것이 정확한 답을 만들어낸다. 

-> 그 부분에 유의해야 한다. 

- 전반적으로 안전하고, 효율적인 방식으로 작성하는 법을 계속해서 연습하자. 

- 잘 모르는 것을 적용하지 않고, 확실하게 아는 것을 적용하도록 하자. 

 

- 마지막에 if문으로 검사를 할 때, n==0을 고려하는 것도 매우 중요하다. 

 

2. 코드 작성

import copy 

maxGap = -int(1e9)
ans = []
    
def dfs(n, pos, ryan, info):
    
    global maxGap 
    global ans 
    
    if pos == len(info) and n == 0:
         
        ryanPoint = 0
        apeachPoint = 0 
    
        for i in range(0, 11):
            
            if ryan[i] == info[i] == 0:
                continue
            
            if ryan[i] > info[i]:
                ryanPoint += (10-i)
            else:
                apeachPoint += (10-i)
                
        gap = ryanPoint - apeachPoint 
        
        if gap > 0:
            if maxGap < gap:
                maxGap = gap 
                
                ans.clear()
                for i in range(0, 11):
                    ans.append(ryan[i])
            elif maxGap == gap:
            
                change = False 
                
                for i in range(10, -1, -1):
                    if ans[i] > ryan[i]:
                        break
                    elif ans[i] < ryan[i]:
                        change = True 
                        break 
                
                if change == True:
                    ans.clear()
                    for i in range(0, 11):
                        ans.append(ryan[i])
       
        return 
    
    
    if pos == len(info):
        return 
    
    
    apeachCnt = info[pos]
    
    for cnt in range(apeachCnt+1, -1, -1):
        if n-cnt >= 0:
            ryan.append(cnt)
            dfs(n-cnt, pos+1, ryan, info)
            ryan.pop(len(ryan)-1)
            
    
    
   

def solution(n, info):
    answer = []
    
    pos = 0
    ryan = []
    
    dfs(n, pos, ryan, info)
    
    if len(ans) == 0:
        answer.append(-1)
    else:
        answer = copy.deepcopy(ans)
    
    
    return answer