문제
https://www.acmicpc.net/problem/5557
풀이
#중간에 나오는 수가 모두 0 이상 20 이하이어야 한다
# 백준 5557
N = int(input())
List = list(map(int,input().split()))
DP= [[0 for _ in range(21)] for _ in range(N+1)]
for i in range(N):
if i==0:
DP[i][List[0]] = 1
else:
for j in range(21):
if DP[i-1][j]:
if 0<=j+List[i]<=20 :
DP[i][j+List[i]] += DP[i-1][j]
if 0<=j-List[i]<=20 :
DP[i][j-List[i]] += DP[i-1][j]
print(DP[N-2][List[N-1]])
간단한 0~20 까지의 값을 계속해서 메모이제이션 하는 문제이다. 차례대로 바로 전에 나온 값들을 이용해서 +/-을 수행한 후 해당 값을 갱신해주면 된다.
'Koala - 14기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[백준/C++] 2890번: 카약 (0) | 2024.03.23 |
---|---|
[Python3/백준] 1965번:상자 넣기 (0) | 2024.03.23 |
[백준/Python] 2565 - 전깃줄 (0) | 2024.03.22 |
[백준/C++] 2651 자동차 경주대회 (0) | 2024.03.18 |
[백준/Python3] 1051번: 숫자 정사각형 (0) | 2024.03.18 |