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
'PS' 카테고리의 다른 글
양과 늑대 [2022 KAKAO BLIND RECRUITMENT] (1) | 2023.10.04 |
---|---|
후보키 2 [2019 KAKAO BLIND RECRUITMENT] (1) | 2023.10.04 |
표현 가능한 이진 트리 [2023 KAKAO BLIND RECRUITMENT] (1) | 2023.10.01 |
길 찾기 게임 [2019 KAKAO BLIND RECRUITMENT] (0) | 2023.10.01 |
경주로 건설 [2020 카카오 인턴십] (1) | 2023.10.01 |