본문 바로가기
알고리즘/BOJ

[Python] 백준 5554: 1학년

by PIAI 2021. 10. 3.

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

 

5557번: 1학년

상근이가 1학년 때, 덧셈, 뺄셈을 매우 좋아했다. 상근이는 숫자가 줄 지어있는 것을 보기만 하면, 마지막 두 숫자 사이에 '='을 넣고, 나머지 숫자 사이에는 '+' 또는 '-'를 넣어 등식을 만들며 놀

www.acmicpc.net

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]])

댓글