다이나믹 프로그래밍 문제1 in python
금광문제
문제
- n X m 크기의 금광이 있다. 금광은 1 X1 의크기를 가지고 각 칸에 특정한 크기의 금이 들어있습니다.
- 채굴자는 첫번째 열부터 금을 캔다. 맨처음에는 첫번째 열의 어느 행에서든 출발할 수 있습니다. 이후 m-1번에 걸쳐 오른쪽 위, 오른쪽, 오른쪽 아래 3가지 중 하나의 위치로 이동, 이때 얻을 수 있는 금의 최대값은?
수기코드
코드
# 테스트 케이스(Test Case) 입력
for tc in range(int(input())):
n, m = map(int, input().split()) # 3*4 행렬
array = list(map(int, input().split())) #1 3 3 2 2 1 4 1 0 6 4 7
# 3*4 행렬 만들기
dp = []
index = 0
for i in range(n):
dp.append(array[index:index + m])
index += m
print("dp : ", dp)
# 다이나믹 프로그래밍 진행
for j in range(1, m):
for i in range(n):
# 왼쪽 위에서 오는 경우
if i == 0:
left_up = 0
else:
left_up = dp[i - 1][j - 1]
print("left_up : ",left_up)
# 왼쪽 아래에서 오는 경우
if i == n - 1:
left_down = 0
else:
left_down = dp[i + 1][j - 1]
print("left_down : ", left_down)
# 왼쪽에서 오는 경우
left = dp[i][j - 1]
dp[i][j] = dp[i][j] + max(left_up, left_down, left)
print("left : ", left)
print("new_dp : ", dp)
result = 0
for i in range(n):
result = max(result, dp[i][m - 1])
print("answer : ", result)
답
출처
이것이 취업을 위한 코딩 테스트다 with 파이썬 (나동빈 저)
Author And Source
이 문제에 관하여(다이나믹 프로그래밍 문제1 in python), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@9566/다이나믹-프로그래밍-문제1-in-python저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)