Algorithm/코딩테스트 [백준 11048] 이동하기(DP) - Python - 🍇 문제 🍇 문제 풀이 알고리즘 설계 수업 들을 때 풀었던 문제와 거의 똑같아서, 바로 풀 수 있었다! (비슷한 문제 풀어보고 싶다면 아래 포스팅 참고해주세요!) https://breath-in317.tistory.com/entry/DP-%EC%88%AB%EC%9E%90%ED%8C%90-%EB%86%80%EC%9D%B4 [Dynamic Programming] 숫자판 놀이 문제숫자들이 2차원 배열에 있다. 가장 윗 행에서 가장 아래 행까지 내려올때 걸 쳐지는 길에 있는 숫자의 합이 가장 높은것을 찾아보자. 이 때 어느 한 cell에 서 다음 cell로 내려올 경우에는 바 breath-in317.tistory.com 풀이방법 1. 2차원 배열을 ground로 저장한다. 2. 각각의 셀(index (i,j))에 도달할 때까지의 합의 경우의 수들이 있을 것이다. 그 중 최댓값을 저장할 DP테이블을 만든다. 각 셀에서 최대 합 = ground[현재] + MAX( dp[1번 셀] , dp[2번 셀] , dp[3번 셀]) 3. 위를 반복하여 모든 셀에 대해 최대 합을 계산하여 도달한 dp테이블에서 r,c에서의 값 => 이전 셀에서 가능한 최대 값으로만 더해진 값 🍇 코드 # 1행, 1열만 자기자신으로 초기화 #나머지부터는 해당 위치 + max(위,왼쪽,왼쪽 대각선 위)로 업데이트 #(r,c)의 값 출력 N,M = map(int,input().split()) ground = [] dp = [[0]*M for _ in range(N)] for i in range(N): ground.append(list(map(int,input().split()))) dp[0][0] = ground[0][0] #1행 초기화 for j in range(1,M): dp[0][j] = ground[0][j] + dp[0][j-1] #1열 초기화 for i in range(1,N): dp[i][0] = ground[i][0] + dp[i-1][0] for i in range(1,N): for j in range(1,M): dp[i][j] = ground[i][j] + max(dp[i-1][j],dp[i][j-1],dp[i-1][j-1]) print(dp[-1][-1]) 공유하기 URL 복사카카오톡 공유페이스북 공유엑스 공유 게시글 관리 구독하기숨쉬는 일상 Contents 당신이 좋아할만한 콘텐츠 [백준 1283] 단축키 지정(구현,문자열) - Python 2024.08.25 [백쥰 1463] 1로 만들기 (DP) - Python 2024.08.14 [백준 11727] 2xn 타일링 2(DP) 2024.07.19 [백준 9625] BABBA (DP) 2024.07.18 댓글 0 + 이전 댓글 더보기