https://www.acmicpc.net/problem/5557
1. n-1 번째까지 연산한 값이 n번째 값과 같으면 성립한다.
2. dy 를 0~20까지 초기화한다.
3. 처음수는 무조건 0~20 사이이므로 1로 초기화해준다.
4. 1번째 부터 바로 이전의 dy 배열에 연산한 결과에 따라 배열에 담겨있는 값(x) - j >= 0와 x + j <= 20 일 때 연산된 값을 올려주고 다시 dy배열을 업데이트해준다.
n = int(input())
a = list(map(int, input().split()))
dy = [0 for _ in range(21)]
dy[a[0]] = 1
for i in range(1, len(a)-1):
tmp = [0 for _ in range(21)]
x = a[i]
for j in range(21):
if x - j <= 0:
tmp[j-x] += dy[j]
if x + j <= 20:
tmp[j+x] += dy[j]
dy = tmp[:]
print(dy[a[n-1]])
'알고리즘 > BOJ' 카테고리의 다른 글
[Python] 백준 14226: 이모티콘 (0) | 2021.10.04 |
---|---|
[Python] 백준 2631: 줄세우기 (0) | 2021.10.04 |
[Python] 백준 10942: 팰린드롬? (0) | 2021.10.03 |
[Python] 백준 11049: 행렬 곱셈 순서 (0) | 2021.10.02 |
[Python] 백준 17070: 파이프 옮기기 1 (0) | 2021.10.02 |
댓글