본문 바로가기

스터디 1일 1커밋

240501 [BOJ/백준] 17484. 진우의 달 여행(small)

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프로 정도는 계속 읽어보면서 생각해보다가 모르겠으면 강사님께 여쭤봐야겠다!