[백준 5557번] 1학년

박형진·2022년 7월 13일
0

https://www.acmicpc.net/problem/5557


코드

import sys

'''
    20까지의 숫자를 저장할 수 있는 2차원 dp 테이블을 생각해야 한다.
    처음 숫자(인덱스0 해당)는 기본값으로 설정하고 시작한다.
    
    ex)
    number 8 -> dp[0] = [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    number 5 -> dp[1] = [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    -> 8과 3을 이용하여 5와 11 둘 다 1가지 방법으로 만들 수 있음 
'''

result = []
n = int(sys.stdin.readline().rstrip())
num = list(map(int, sys.stdin.readline().rstrip().split()))
dp = [[0] * 21 for _ in range(n)]
dp[0][num[0]] = 1

for i in range(1, n - 1):
    for cur_num in range(21):
        if dp[i - 1][cur_num] != 0:
            if 0 <= cur_num + num[i] <= 20:
                dp[i][cur_num + num[i]] += dp[i - 1][cur_num]
            if 0 <= cur_num - num[i] <= 20:
                dp[i][cur_num - num[i]] += dp[i - 1][cur_num]
print(dp[-2][num[-1]])
profile
안녕하세요!

0개의 댓글