본문 바로가기

개발/백준

[백준] 1932번. 정수 삼각형 (C++)

문제 설명

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

 

1932번: 정수 삼각형

첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다.

www.acmicpc.net

 

해결 방법

dp문제이다.

두번째 줄부터 검사할 것이다

 

제일 왼쪽에 있는 경우면 오른쪽 위 대각선 숫자를 더해준다.

제일 오른쪽에 있는 경우면 왼쪽 위 대각섯 숫자를 더해준다.

그 외는 양쪽 대각선 위치에 있는 숫자 중 더 큰것을 더해준다.

마지막 줄에서 가장 큰 수를 구해준다.

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

int max(int a, int b)
{
	if (a > b)return a;
	return b;
}

int main() 
{
	//INPUT
	int n; cin >> n;
	vector < vector<int >> triangle(n, (vector<int>(n, -1)));

	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < i + 1;j++)
		{	cin >> triangle[i][j];	}
	}



	//SEARCH
	for (int i = 1; i < n; i++)
	{
		for (int j = 0; j <= i; j++)
		{	
			//오른쪽 대각선만 검사
			if (j == 0) { triangle[i][j] += triangle[i - 1][j]; }
			//왼쪽 대각선만 검사
			else if (j == i) { triangle[i][j] += triangle[i - 1][j-1]; }
			//양쪽 대각선 검사
			else { triangle[i][j] += max(triangle[i - 1][j - 1], triangle[i - 1][j]); }
		}
	}


	int maxResult = triangle[n - 1][0];

	for (int i = 1; i < n; i++)
	{
		if (maxResult < triangle[n-1][i])
		{	maxResult = triangle[n - 1][i];	}
	}

	cout << maxResult;

}

 

'개발 > 백준' 카테고리의 다른 글

[백준] 12018번. Yonsei TOTO (C++)  (1) 2024.01.06
[백준] 14501번. 퇴사 (C++)  (4) 2024.01.05
[백준] 1149번. RGB거리 (C++)  (0) 2024.01.02
[백준] 1003번. 피보나치 함수 (C++)  (0) 2023.12.27
[백준] 19941번. 햄버거 분배  (1) 2023.12.26