1932번: 정수 삼각형
첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다.
www.acmicpc.net
위 예시의 삼각형을 아래처럼 입력을 받는다
[풀이]
가장 아랫줄부터 시작해서 올라가는 방식인 데,
가장 아랫줄에 인접한 두 원소 중 큰 원소를 대각선 위의 원소와 합하는 것을 반복한다
ex) 4번째 줄의 2는 2+ max(4, 5) = 7로 바뀐다
4번째 줄의 7은 7+ max(5, 2) = 12로 바뀐다
4번째 줄의 4는 4+ max(2, 6) = 10으로 바뀐다
4번째 줄의 4는 4+ max(6, 5) = 10 으로 바뀐다
그럼 삼각형은 이렇게 바뀜. 그 아랫줄은 이제 신경 쓰지 않는다
7
3 8
8 1 0
7 12 10 10
이를 반복해보면
7
3 8
20 13 10
7
23 21
30
[참고]
[ C / C++ ] 백준 1932 정수 삼각형 (tistory.com)
[ C / C++ ] 백준 1932 정수 삼각형
문제 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 위 그림은 크기가 5인 정수 삼각형의 한 모습이다. 맨 위층 7부터 시작해서 아래에 있는 수 중 하나를 선택하여 아래층으로 내려올 때, 이제까지 선택된 수의 합이 최
sujin-dev.tistory.com
이를 코드로 표현해보자!
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n;
cin >> n;
int tri[n][n];
//삼각형 입력 받기
for(int i=0; i<n; i++){
for(int j = 0; j<=i; j++){
cin >> tri[i][j];
}
}
//풀이: 가장 아랫줄부터 시작해서 삼각형을 수정해나감
for(int i=n-1; i>0 ; i--){
for(int j=0; j<i; j++){
tri[i-1][j] += max(tri[i][j], tri[i][j+1]);
}
}
cout << tri[0][0] <<"\n";
return 0;
}
'‡ CODING TEST STUDY ‡ > º 백준' 카테고리의 다른 글
[백준 11058번 C++] 크리보드 (0) | 2023.10.20 |
---|---|
[백준 2156번 C++] 포도주 시식 (0) | 2023.10.15 |
[백준 2579번 C++] 계단 오르기 (0) | 2023.10.14 |
[백준 11057 C++] 오르막 수 (1) | 2023.10.14 |
[백준 10844번 C++] 쉬운 계단 수 (0) | 2023.10.12 |