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
n,s,m = map(int,input().split())
v = list(map(int,input().split()))
dp = [[0]*(m+1) for _ in range(n+1)]
dp[0][s] = 1
for i in range(n):
for j in range(m+1):
if dp[i][j] == 1:
n1 = v[i] + j
n2 = j - v[i]
if n2 >= 0:
dp[i+1][n2] = 1
if n1 <=m:
dp[i+1][n1] = 1
res = -1
for i in range(m, -1, -1):
if dp[n][i] == 1:
res = max(res, i)
print(res)
2차원 배열을 사용하는 문제이다
나는 1차원 배열로 생각해서 풀었다. 다만 문제 이해가 어려워서 못풀고 해설을 봤다...
이 문제는
1. 두번째 줄 주어지는 볼륨차이를 계산해서 2차원 dp에 값을 저장하는 것이다
-> 여기서 만일 볼륨차이값보다 크거나 0보다 더 작으면 그냥 넘어감(기록을 안함)
2. 배열 끝부분만 탐색해서 1인 값중에 가장 큰값을 넣어서 리턴함
내가 못푼 이유
2차원 dp를 떠오르게 하는 것이 안됬다.. 아직도 잘 모르겠다
아시면 덧글로...
'💡 Codeing Test > 백준' 카테고리의 다른 글
백준 22862) 가장 긴 짝수 연속한 부분 수열 (large) (1) | 2024.03.08 |
---|---|
백준 5525) IOIOI (python) (0) | 2024.03.07 |
백준 19583) 싸이버 개강 총회 (python) (1) | 2024.03.05 |
백준 3190) 뱀 (python) (1) | 2024.02.26 |
[백준_13335] 트럭 (python) (0) | 2023.10.05 |