알고리즘/[python] 백준 BOJ
[python] 백준 5557 1학년
Alan_Kim
2023. 3. 15. 00:00
728x90
반응형
https://www.acmicpc.net/problem/5557
5557번: 1학년
상근이가 1학년 때, 덧셈, 뺄셈을 매우 좋아했다. 상근이는 숫자가 줄 지어있는 것을 보기만 하면, 마지막 두 숫자 사이에 '='을 넣고, 나머지 숫자 사이에는 '+' 또는 '-'를 넣어 등식을 만들며 놀
www.acmicpc.net
문제 해결
- 이전 항들의 영향을 받는다. 이전 항들까지 더하기, 빼기를 이용해서 만들 수 있는 것은 0이상 20 이하여야 한다.
- dp로 가지수를 만들수 있다. dp[i][j]를 j-1번째 항까지 더하기 빼기를 이용해서 i를 만들 수 있는 가지수를 나타낸다.
- dp[A[n-1]][n-2] 의 값을 구하면 된다.
CODE
import sys
input = sys.stdin.readline
n = int(input())
A = list(map(int,input().split()))
dp = [[0]*n for _ in range(21)]
dp[A[0]][0] = 1
for i in range(1,n-1):
for j in range(21):
if j + A[i] <= 20:
dp[j+A[i]][i] += dp[j][i-1]
if 0<=j-A[i]:
dp[j-A[i]][i] += dp[j][i-1]
print(dp[A[-1]][n-2])
728x90
반응형