백준 1932 정수 삼각형

2019. 11. 25. 17:18

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

 

1932번: 정수 삼각형

문제 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 위 그림은 크기가 5인 정수 삼각형의 한 모습이다. 맨 위층 7부터 시작해서 아래에 있는 수 중 하나를 선택하여 아래층으로 내려올 때, 이제까지 선택된 수의 합이 최대가 되는 경로를 구하는 프로그램을 작성하라. 아래층에 있는 수는 현재 층에서 선택된 수의 대각선 왼쪽 또는 대각선 오른쪽에 있는 것 중에서만 선택할 수 있다. 삼각형의 크기는 1 이상 500 이하이다. 삼각형을 이루고 있는 각 수는

www.acmicpc.net

동적계획법 문제였습니다.

 

[문제설명]

맨 위층 7부터 시작해서 아래에 있는 수 중 하나를 선택하여 아래층으로 내려올 때, 이제까지 선택된 수의 합이 최대가 되는 경로를 구하는 프로그램을 작성하라. 아래층에 있는 수는 현재 층에서 선택된 수의 대각선 왼쪽 또는 대각선 오른쪽에 있는 것 중에서만 선택할 수 있다.

 

점화식을 세우기 위해 규칙을 찾아보았습니다.

1. 2차원 배열의 열 번호가 1인 경우(triangle[i][1]) 는 바로 위의 열번호가 1인 배열의 합산값(sum[i][1])을 자기 자신과 더해주면된다.

if(j==1){
	sum[i][j] = sum[i-1][j] + triangle[i][j];
}

2. 열 번호가 행 번호와 같은 경우(triangle[i][j], i==j) 바로위의 열과 행의 번호가 같은 배열의 합산값(sum[i][j], i==j)을 자기 자신과 더해주면된다.

 else if(j==i){
	sum[i][j] = sum[i-1][j-1] + triangle[i][j];
}

3. 그 외에 값들은 바로위의 두개의 합산값(sum[i-1][j-1] , sum[i-1][j]) 중 큰 값을 선택해 주면 된다. 

 else{
	sum[i][j] = Math.max(sum[i-1][j-1],sum[i-1][j]) + triangle[i][j];
}

 

'Algorithm & Data Structure > BOJ' 카테고리의 다른 글

백준 1912 연속합  (0) 2019.11.27
백준 2156 포도주 시식  (0) 2019.11.27
백준 2193 이친수  (0) 2019.11.25
백준 1080 행렬  (0) 2019.11.21
백준 2529 부등호  (0) 2019.11.13

+ Recent posts