boj. XX 벽 부수고 이동하기2 [link] 랑 비슷한 유형의 실수를 했던 문제.
boj. 17484 진우의 달 여행 [실버 🥈🥈🥈]
f = open("input.txt", "r")
N, M = map(int, f.readline().split())
grid = []
for _ in range(N):
grid.append(list(map(int, f.readline().split())))
dir = [(-1,-1), (-1,0), (-1,1)]
grid = grid + [[0]*M]
dp = [[[c]*3 for c in grid[0]]] + [[[int(1e8)]*3 for _ in range(M)] for _ in range(N)]
def find_min_cost(pi, pj, di):
## dp[pi][pj]에서 di 방향을 제외한 누적값 중 min값을 return
mn_cost = int(1e8)
for ci, c in enumerate(dp[pi][pj]):
if ci != di:
mn_cost = min(mn_cost, c)
return mn_cost
for i in range(1, N+1): ## 1. 좌표순회
for j in range(M):
for di, (dx, dy) in enumerate(dir): # 2. 좌표 및 이전방향에 따라 dp table update
pi, pj = i+dx, j+dy
if 0<=pi<N+1 and 0<=pj<M: # 범위 내에 포함되는 경우만
dp[i][j][di] = find_min_cost(pi, pj, di) + grid[i][j]
ans = 1e8
for each_moon in dp[-1]:
for each_dir in each_moon:
ans = min(each_dir, ans)
print(ans)
'알고리즘 > 백준' 카테고리의 다른 글
백준 boj 21608. 상어초등학교 (0) | 2025.03.20 |
---|---|
백준 boj. 17142 연구소 3 [골드 🥇🥇🥇] (0) | 2025.03.10 |
boj >> 1931 회의실 배정(c++) (0) | 2020.04.13 |
boj >> 2193 이친수 (0) | 2020.03.29 |
boj >> 17070 파이프 옮기기1 (0) | 2020.03.28 |