백준 python 기록

백준 1495 기타리스트

우히힝 2021. 12. 30. 09:39

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

 

1495번: 기타리스트

첫째 줄에 N, S, M이 주어진다. (1 ≤ N ≤ 50, 1 ≤ M ≤ 1,000, 0 ≤ S ≤ M) 둘째 줄에는 각 곡이 시작하기 전에 줄 수 있는 볼륨의 차이가 주어진다. 이 값은 1보다 크거나 같고, M보다 작거나 같다.

www.acmicpc.net

 

문제를 보면 한번이라도 실패 하면 다음 음악으로 이동 할 수 없기 떄문에 각 채널마다 + - 의 경우를 전부 넣으면 된다.

 

dp 문제

2차원배열을 만들고 나서 어떻게 해서 + - 를 할지 고민좀 했다. 

 

해결 방법은 최대 볼륨 M에 대한 1차원 배열에서 + - 의 경우의 수를 전부 대입

 

n,start,M = map(int,input().split())

m = list(map(int,input().split()))

dp = [[0]*(M+1) for _ in range(n+1)]
dp[0][start] = 1

for i in range(n):
    for j in range(M+1):
        if dp[i][j] == 1:
            if j + m[i] <= M:
                dp[i+1][j+m[i]] = 1
            if j - m[i] >= 0:
                dp[i+1][j-m[i]] = 1

if sum(dp[n]) == 0:
    print(-1)
else:
    for i in range(M, -1, -1):
        if dp[n][i] == 1:
            print(i)
            break

쉬움