Koala - 14기/코딩테스트 준비 스터디
[BOJ|Python] 백준 5557 1학년
jeonyoungseo
2024. 3. 22. 17:14
문제
https://www.acmicpc.net/problem/5557
5557번: 1학년
상근이가 1학년 때, 덧셈, 뺄셈을 매우 좋아했다. 상근이는 숫자가 줄 지어있는 것을 보기만 하면, 마지막 두 숫자 사이에 '='을 넣고, 나머지 숫자 사이에는 '+' 또는 '-'를 넣어 등식을 만들며 놀
www.acmicpc.net
풀이
#중간에 나오는 수가 모두 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 까지의 값을 계속해서 메모이제이션 하는 문제이다. 차례대로 바로 전에 나온 값들을 이용해서 +/-을 수행한 후 해당 값을 갱신해주면 된다.