코딩하는 Fug

5557 1학년 본문

백준풀이-python

5557 1학년

Fug 2021. 10. 25. 16:27

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

 

5557번: 1학년

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

www.acmicpc.net

#5557 1학년 정리

'''
bfs 인데 dp를 사용할 거임. 식은 고정이고 마지막 수 전까지를 식으로 써서 마지막 수가 나와야 되는것.
고로 마지막 수를 먼저 저장을 시킨다음에 dp를 마지막 수 전까지 돌리고 마지막수가 맞는지 확인 후 cnt+1 이런식으로 돌려야 될듯
돌릴때 조건은 i>=0 and i<=20
'''

import sys
input=sys.stdin.readline
#스탠다드 인풋


n=int(input())
#n입력


numbers=list(map(int,input().split()))
#numbers 리스트 생성


dp={numbers[0]:1}
#초기값 설정 처음 식은 등호 없이 1


answer=numbers[n-1]
#답은 마지막 값


for i in range(1,n-1):
    nextdp={}
    for number,cnt in dp.items():
        if number+numbers[i]<=20:
            nextdp[number+numbers[i]]=nextdp.get(number+numbers[i],0)+cnt
        if number-numbers[i]>=0:
            nextdp[number-numbers[i]]=nextdp.get(number-numbers[i],0)+cnt
    dp=nextdp

#dp를 돌리는데 조건에 맞으면 +cnt 를 해준다 단 탐색되지 않았던 것에 경우에는 cnt로 설정해준다.


print(dp[answer])

#답

 

#기본적인 dp 문제, dict를 이용하여 잘 해냈다 와후

'백준풀이-python' 카테고리의 다른 글

2616 소형기관차  (0) 2021.12.01
2281 데스노트  (0) 2021.11.17
12865 평범한 배낭  (0) 2021.10.25
12026 BOJ 거리  (0) 2021.10.21
11058 크리보드  (0) 2021.10.21