금광 캐기 문제

Question

nXm 크기의 금광이 있다. 각 칸 마다 금이 있으며 시작은 첫번째 열에서 진행한다. 그후 오른쪽 위, 오른쪽, 오른쪽 아래 방향으로 이동하면서 칸을 이동할 수 있는데, 이때 마지막 열에 도닥했을 때, 가질 수있는 최대 금의 양을 구해라

Example

       
1 2 3 2
2 1 4 1
0 6 4 7

위와 같이 3X4 크기의 금광이 있을 때 취할 수 있는 금의 최대양은 (2,1) -> (3,2) -> (3,3) -> (3,4) 을 이동해서 19만큼의 금이 최대값이다.

Solution

여기서 찾을 수 있는 점화식은 아래와 같다. row,col이 있을때 해당 칸으로 오기 위해 거쳐야하는 이전의 칸은 upleft,left,downleft 중에 하나이다.

만약, row==0 이면 upleft는 0이다 만약, row==n이면 down=0이다.

upleft=Frow-1,col-1

left=Frow,col-1

downleft=Frow+1,col-1

Frow,col=max(upleft,left,downleft)으로 반복적으로 수행하면 되고 마지막 열에 대해 최대값을 구하면 된다.

result=max(Frow,n)이다.

Solution

def gold():
  for col in range(cols):
    for row in range(rows):
      upleft,left,downleft=gold[row-1][col-1],gold[row][col-1],gold[row+1][col-1]
      if row==0:
        upleft=0
      if row ==rows-1:
        downleft=0
      gold[row][cold]+=max(upleft,left,downleft)
  result=0

  for row in range(rows):
    result=max(result,gold[row][-1])
    
  return result
    
if __name__ == "__main__":
  rows,cols=map(int,input().split)
  graph=[list(map(int,input().split)) for _ in range(row)]

  print(gold())

댓글남기기