본문 바로가기
1-4. 코딩테스트 문제집(진행중)/PCCP(Lv3)

[PCCP] Lv3: 정수 삼각형(43105) 해설

by cogito21_cpp 2024. 12. 26.
반응형

문제

- 문제 링크: 정수 삼각형

 

해설

- 자료구조: 

- 시간복잡도: 

 

(풀이과정)

1) 

2) 

3) 

4) 

 

코드

(C언어)

solution 1)

더보기
#include<>

solution 2)

더보기
#include<>

solution 3)

더보기
#include<>

 

(C++)

solution 1)

더보기
#include<>

solution 2)

더보기
#include<>

solution 3)

더보기
#include<>

 

(C#)

solution 1)

더보기
#include<>

solution 2)

더보기
#include<>

solution 3)

더보기
#include<>

 

(Java)

solution 1)

- N: 삼각형의 높이

- N*N 2차원 dp 테이블 초기화할 떄 시간 복잡도: O(N^2)

- dp 테이블을 채우는 동작: O(N^2)

- 최종 시간 복잡도: O(N^2)

더보기
class Solution {
    public int solution(int[][] triangle) {
        int n = triangle.length;
        int[][] dp = new int[n][n]; // dp 배열 초기화
        
        // dp 배열의 맨 아래쪽 라인 초기화
        for (int i = 0; i < n; ++i) {
            dp[n - 1][i] = triangle[n - 1][i];
        }
        
        // 아래쪽 라인부터 올라가면서 dp 배열 채우기
        for (int i = n - 2; i >= 0; --i) {
            for (int j = 0; j <= i; ++j) {
                dp[i][j] = Math.max(dp[i + 1][j], dp[i + 1][j + 1]) + triangle[i][j];
            }
        }
        return dp[0][0]; // 꼭대기에서의 최댓값 반환
    }
}

solution 2)

더보기
#include<>

solution 3)

더보기
#include<>

 

(Python)

solution 1)

- N: 삼각형의 높이

- N*N 2차원 dp 테이블 초기화: O(N^2)

- dp 테이블을 채우는 동작: O(N^2)

- 최종 시간 복잡도: O(N^2)

더보기
def solution(triangle):
    n = len(triangle)
    dp = [[0] * n for _ in range(n)] # dp 테이블 초기화
    
    # dp 테이블의 맨 아래쪽 라인 초기화
    for i in range(n):
        dp[n - 1][i] = triangle[n - 1][i]
        
    # 아래쪽 라인부터 올라가면 dp 테이블 채우기
    for i in range(n - 2, -1, -1):
        for j in range(i + 1):
            dp[i][j] = max(dp[i + 1][j], dp[i + 1][j + 1]) + triangle[i][j]
            
    return dp[0][0] # 꼭대기에서의 최댓값 반환

solution 2)

더보기
import

solution 3)

더보기
import

 

(JavaScript)

solution 1)

- N: 삼각형의 높이

- N*N 크기의 2차원 dp 테이블 초기화: O(N^2)

- dp 테이블을 채우는 동작: O(N^2)

- 최종 시간 복잡도: O(N^2)

더보기
function solution(triangle) {
    const n = triangle.length;
    const dp = Array.from(Array(n), () => Array(n).fill(0)); // dp 테이블 초기화
    
    // dp 테이블의 맨 아래쪽 라인 초기화
    for (let i = 0; i < n; ++i) {
        dp[n - 1][i] = triangle[n - 1][i];
    }
    
    // 아래쪽 라인부터 올라가면서 dp 테이블 채우기
    for (let i = n - 2; i >= 0; --i) {
        for (let j = 0; j <= i; ++j) {
            dp[i][j] = Math.max(dp[i + 1][j], dp[i + 1][j + 1]) + triangle[i][j];
        }
    }
    
    return dp[0][0]; // 꼭대기에서의 최댓값 반환
}

solution 2)

더보기
import

solution 3)

더보기
import

 

반응형