컴굥일지

[BOJ/백준 1932][C++] 정수 삼각형 본문

알고리즘/코테 문제

[BOJ/백준 1932][C++] 정수 삼각형

gyong 2022. 2. 16. 23:54
반응형

문제

https://www.acmicpc.net/problem/1932

문제 내용

위에서부터 내려올 때, 아래 또는 오른쪽 아래 방향으로만 내려올 수 있다. (예제 입력 기준)

내려오면서 합이 최대가 되는 경로를 구하면 된다.

 

문제 풀이

이 문제도 역시 dp를 사용한다.

이 문제에서 dp를 채워나갈 때, 첫 번째 열은 무조건 위에서 내려오는 방법만 있다.
더불어, i==j인 곳은 무조건 대각선 방향으로만 내려올 수 있다.

위 두가지 경우를 제외하면, 아래 또는 오른쪽 아래 방향 중에서 더 큰 쪽을 선택하면 된다.

dp를 채우면서 max값을 따로 파악해주어야지 나중에 결과를 출력할 수 있다.

 

코드

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int dp[505][505] = { 0, };

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	//입력
	int n; cin >> n;
	for (int i = 1; i <= n; i++) { //높이
		for (int j = 1; j <= i; j++) { //가로
			cin >> dp[i][j];
		}
	}

	//문제 해결
	int mmax = dp[1][1];

	for (int i = 2; i <= n; i++) {
		for (int j = 1; j <= i+1; j++) {
			if (j == 1) dp[i][j] += dp[i - 1][j] ;
			else if (j == i) dp[i][j] += dp[i - 1][j-1] ;
			else dp[i][j] += max(dp[i - 1][j-1], dp[i - 1][j]);
			mmax = max(mmax, dp[i][j]);
		}
	}
    
    	//결과 출력
	cout << mmax << '\n';
}

 

 

반응형

'알고리즘 > 코테 문제' 카테고리의 다른 글

[BOJ/백준 5525][C++] IOIOI  (0) 2022.02.18
[BOJ/백준 11727][C++] 2xn 타일링 2  (0) 2022.02.17
[BOJ/백준 11048][C++] 이동하기  (0) 2022.02.15
[BOJ/백준 11399][C++] ATM  (0) 2022.02.14
[BOJ/백준 11051][C++] 이항계수 2  (0) 2022.02.11
Comments