[BOJ1932] 정수 삼각형
Updated:
맨 위에서 아래까지 더하며 내려오는 최대 값의 경로
- 아래층에 있는 수는 현재 층에서 선택된 수의 대각선 왼쪽 또는 오른쪽에 있는 것 중에서만 선택
- 삼각형 크기는 1이상 500이하, 모두 정수, 범위 0 ~ 9999
입력
- 첫째 줄에 삼각형 크기 n ( 1 <= n <= 500)
- 둘째줄부터 n개의 줄에 정수 삼각형
출력
- 합이 최대가 되는 경로에 있는 수의 합
설계
- 경로를 따져보았을 때, 맨 왼쪽과 맨오른쪽은 단순히 위의 값을 현재 값에 더해주면 된다.
- 하지만 다른 인덱스에서는 왼쪽 위, 오른쪽 위 대각선에서 오는 두 가지의 경로가 있기 때문에, 이것의 max 값을 따져봐야한다.
피드백
- 배열 인덱스를 정확하게 나누는 것이 관건인데, c++의 포인터 특성 탓에 이상하게 인덱싱을 해도 정답이 나왔다.
- 음수, 또는 최대 인덱스 이상의 인덱스를 참조해도 컴파일 오류가 나지 않았다.
- 따라서, 아래의 핵심 코드 한 줄로 풀이가 가능했다.
dp[i][j] = MAX(dp[i-1][j-1] + dp[i][j], dp[i-1][j] + dp[i][j]); - 하지만 코드를 보고 이해하기 위해서는 정확하게 구분하여 나누는 것 필요
How I solved(click to github)
ref :
BOJ1932
Leave a comment