🕛문제
🕐문제 풀이
- 첫 연료 사용량을 받아온다
1) 연료량의 각 끝 값을 최대값으로 만들고, 값마다 3개씩 만들어준다
2) 최댓값으로 만든 이유: 인덱스를 자유롭게 사용하기 위해
3) 3개씩 만든 이유: 현재 값에서 수직으로, 왼쪽으로, 오른쪽으로 내려온 값들을 각각 저장
- n-1번 연료량을
input
받으며 이전 값에서 각 방향 별 최소 사용량을 기반으로 현재 input받은 연료량들을 갱신한다
- 마지막까지 계산하면, 각 위치별 최솟값 들 중 최솟값을 찾아 출력
n, m = map(int, input().split())
MAX = 100*1000
dp = [[MAX]*3] + [[el]*3 for el in list(map(int, input().split()))] + [[MAX]*3]
for i in range(n-1):
fuel = [MAX]+list(map(int, input().split()))+[MAX]
tmp = [[MAX]*3] + [[0]*3 for _ in range(m)] + [[MAX]*3]
for j in range(1, m+1):
'''
왼쪽으로 내려갈 때 사용량
현 시점에서 오른쪽 상단 위치에서 min(수직으로 내려온 값, 오른편으로 내려온 값) + 현재 연료량
'''
tmp[j][0] = min(dp[j + 1][1], dp[j + 1][2]) + fuel[j]
'''
수직으로 내려갈 때 사용량
현 시점에서 수직 상단 위치에서 min(오른쪽으로 내려온 값, 왼쪽으로 내려온 값) + 현재 연료량
'''
tmp[j][1] = min(dp[j][0], dp[j][2]) + fuel[j]
'''
오른쪽으로 내려갈 때 사용량
현 시점에서 왼쪽 상단 위치에서 min(왼쪽으로 내려온 값, 수직으로 내려온 값) + 현재 연료량
'''
tmp[j][2] = min(dp[j - 1][0], dp[j - 1][1]) + fuel[j]
dp = tmp
print(min(map(min, dp)))
😎새로운 아이디어나 개선할 점은 항상 환영입니다!