https://www.acmicpc.net/problem/17484
나의 코드
N, M = map(int, input().split())
dp = [[[1000, 1000, 1000] for _ in range(M)] for _ in range(N)]
fuel = [list(map(int, input().split())) for _ in range(N)]
for i in range(M):
dp[0][i] = [fuel[0][i], fuel[0][i], fuel[0][i]]
for i in range(1, N):
for j in range(M):
for k in range(3):
if (j == 0 and k == 2) or (j == M-1 and k == 0):
continue
for l in range(3):
if k == l:
continue
dp[i][j][k] = min(dp[i][j][k], dp[i-1][j-k+1][l]+fuel[i][j])
min_v = 1000
for i in range(M):
min_v = min(min(dp[N-1][i]), min_v)
print(min_v)
결과

꼭 dp로 풀어보고 싶어서 진짜 몇일동안 계속 봤던 것 같다. 아직 완전하게 이해한 건 아니지만 완전한 이해까지 부족한 5프로 정도는 계속 읽어보면서 생각해보다가 모르겠으면 강사님께 여쭤봐야겠다!
'스터디 1일 1커밋' 카테고리의 다른 글
| 240506 [BOJ/백준] 14620. 꽃길 (0) | 2024.05.06 |
|---|---|
| 240501 [BOJ/백준] 21921. 블로그 (1) | 2024.05.01 |
| 240430 [BOJ/백준] 24553. 팰린드롬 게임 (0) | 2024.04.30 |
| 240430 [BOJ/백준] 1764. 듣보잡 (0) | 2024.04.30 |
| 240428 [BOJ/백준] 1303. 전쟁 - 전투 (0) | 2024.04.28 |