728x90
반응형
https://www.acmicpc.net/problem/16987
16987번: 계란으로 계란치기
원래 프로그래머의 기본 소양은 팔굽혀펴기를 단 한 개도 할 수 없는 것이라고 하지만 인범이는 3대 500을 넘기는 몇 안되는 프로그래머 중 한 명이다. 인범이는 BOJ에서 틀린 제출을 할 때마다 턱
www.acmicpc.net
문제 해결
- 전형적인 백트래킹 문제
- 하나씩 차례로 부딪힐 수 있는 것을 부딪히고 다음 것을 부딪히고 하다가 끝까지 간후 다시 부딪히기 전으로 합치고 다음 것부터 부딪히고 모든 경우의 수를 계산해야한다.
CODE
n = int(input())
S = []
for _ in range(n):
a, b = map(int, input().split())
S.append([a,b])
def dfs(now):
if now == len(S):
cnt = 0
for s, _ in S:
if s<=0:
cnt += 1
return cnt
if S[now][0] <=0:
return dfs(now+1)
for i in range(len(S)): # now와 깰 부딪힐 것이 잇는지 찾기
if i == now: continue
if S[i][0] >0: break
else:
return dfs(now+1) # 다른 것 찾기
answer = 0
for i in range(len(S)):
if i == now: continue
if S[i][0] <=0: continue
S[i][0] -= S[now][1]
S[now][0] -= S[i][1]
answer = max(answer, dfs(now+1))
S[i][0] += S[now][1]
S[now][0] += S[i][1]
return answer
print(dfs(0))
728x90
반응형
'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글
[python] 백준 2621 카드게임 (0) | 2023.04.21 |
---|---|
[python] 백준 1799 비숍 (0) | 2023.04.20 |
[python] 백준 1941 소문난 칠공주 (0) | 2023.04.18 |
[python] 백준 2482 색상환 (0) | 2023.04.18 |
[python] 백준 1788 피보나치 수의 확장 (0) | 2023.04.17 |
댓글