백준 1932번: 정수 삼각형

2021. 7. 10. 00:57·IT/BOJ 문제정리

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

 

1932번: 정수 삼각형

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

www.acmicpc.net

 

 

0. 알고리즘 분류

 다이나믹 프로그래밍

 

 

1. 문제

7

3 8

8 1 0

2 7 4 4

4 5 2 6 5

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

 

 

2. 풀이

 또 DP 문제다. 1149번의 "RGB 거리"와 매우 유사하다. 모양이 삼각형일 뿐. 우선 삼각형의 정수값을 받아들일 배열로 삼각형 모양으로 동적 배열을 사용했다. 그냥 2차원 배열을 써도 문제는 없지만, 될 것 같아서 그냥 했다.

 

 위에서부터 저장된 dp배열 두 값 중 최댓값을 dp배열에 저장하고 아래의 값을 더하면 된다. 하지만, 제일 왼쪽과 오른쪽변의 정수는 하나의 정수만을 받는다. 따라서 이를 염두에 두고 코딩한다.

 

 

3. 코드

#include <iostream>

using namespace std;

int max(int x, int y) {
	return (x > y) ? x : y;
}

int main(void) {
	int n;
	cin >> n;
	
	int** tri = new int*[n];
	int** dp = new int*[n];
	for (int i = 0; i < n; i++) {
		tri[i] = new int[i+1];
		dp[i] = new int[i+1];
		
		for (int j = 0; j <= i; j++) {
			cin >> tri[i][j];
		}
	}
	
	dp[0][0] = tri[0][0];
	for (int i = 1; i < n; i++) {
		for (int j = 0; j <= i; j++) {
			if (j == 0) {
				dp[i][j] = tri[i][j] + dp[i-1][j];
			}
			else if (j == i) {
				dp[i][j] = tri[i][j] + dp[i-1][j-1];
			}
			else {
				dp[i][j] = tri[i][j] + max(dp[i-1][j-1], dp[i-1][j]);
			}
		}
	}
	
	int ans = 0;
	for (int i = 0; i < n; i++) {
		if (ans < dp[n-1][i]) {
			ans = dp[n-1][i];
		}
	}
	cout << ans;
	
	for (int i = 0; i < n; i++) {
		delete tri[i];
		delete dp[i];
	}
	delete tri;
	delete dp;
	
	return 0;
}

'IT > BOJ 문제정리' 카테고리의 다른 글

백준 4179번: 불!  (0) 2021.07.14
백준 10026번: 적록색약  (0) 2021.07.13
백준 1149번: RGB 거리  (0) 2021.07.09
백준 1034번: 램프  (0) 2021.07.08
백준 9663번: N-Queen  (0) 2021.07.08
'IT/BOJ 문제정리' 카테고리의 다른 글
  • 백준 4179번: 불!
  • 백준 10026번: 적록색약
  • 백준 1149번: RGB 거리
  • 백준 1034번: 램프
KimCookieYa
KimCookieYa
무엇이 나를 살아있게 만드는가
  • KimCookieYa
    쿠키의 주저리
    KimCookieYa
  • 전체
    오늘
    어제
    • 분류 전체보기 (576)
      • 혼잣말 (88)
      • TIL (3)
      • 커리어 (24)
        • Sendy (21)
        • 외부활동 기록 (2)
      • 프로젝트 (186)
        • 티스토리 API (5)
        • 코드프레소 체험단 (89)
        • Web3 (3)
        • Pint OS (16)
        • 나만무 (14)
        • 대회 (6)
        • 정글 FE 스터디 (16)
        • MailBadara (12)
        • github.io (1)
        • 인공지능 동아리, AID (5)
        • 졸업과제 (18)
        • OSSCA 2024 (1)
      • 크래프톤 정글 2기 (80)
      • IT (169)
        • 코딩 (4)
        • CS (18)
        • 에러 (5)
        • 블록체인 (23)
        • Front-End (40)
        • 알고리즘&자료구조 정리 (3)
        • 코딩테스트 (3)
        • BOJ 문제정리 (41)
        • WILT (12)
        • ML-Agents (4)
        • 강화학습 (1)
        • Android (0)
        • LLM (2)
      • 전공 (1)
        • 머신러닝 (1)
      • 자기계발 (20)
        • 빡공단X베어유 (2)
        • 독서 (15)
  • 블로그 메뉴

    • 홈
    • 방명록
    • Github
    • Velog
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    딥러닝
    pintos
    리액트
    머신러닝
    코드프레소
    react
    RNN
    Pint OS
    파이썬
    해커톤
    센디
    프로그래머스
    부산대
    자바스크립트
    NEAR Protocol
    numpy
    나만무
    JavaScript
    블록체인
    글리치해커톤
    크래프톤정글
    니어프로토콜
    알고리즘
    핀토스
    Flutter
    졸업과제
    MailBadara
    docker
    OS
    사이드프로젝트
  • hELLO· Designed By정상우.v4.10.3
KimCookieYa
백준 1932번: 정수 삼각형
상단으로

티스토리툴바