백준|5557번|1학년

README·2022년 7월 31일
0

파이썬 PS풀이

목록 보기
87/136

문제설명
수열을 입력받고 마지막 숫자를 제외한 각 숫자들 사이에 +,-를 넣어가면서 항상 0이상 20이하의 숫자가 되고 최종 결과값이 수열의 마지막 수와 같은 경우의 수를 출력하는 문제입니다.

작동 순서
1. 수의 개수를 입력받습니다.
2. 수열을 입력받습니다.
3. 수열의 각자리에서 0이상 20이하의 수를 만들수 있는 방법들의 개수를 구합니다.
4. 계산이 끝나면 최종 결과값들 중 수열의 마지막 수를 만들 수 있는 방법의 개수를 출력합니다.

소스코드

import sys
N = int(sys.stdin.readline())
num = list(map(int, sys.stdin.readline().split()))
dp = [[0 for _ in range(21)] for _ in range(N+1)]
dp[1][num[0]] = 1
for i in range(2, N):
    for j in range(21):
        if 20 >= j+num[i-1] >= 0:
            dp[i][j+num[i-1]] += dp[i-1][j]
        if 20 >= j-num[i-1] >= 0:
            dp[i][j-num[i-1]] += dp[i-1][j]
print(dp[N-1][num[-1]], end="")
profile
INTP 개발자 지망생

0개의 댓글