๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ

https://school.programmers.co.kr/learn/courses/30/lessons/43105

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr


1. ๋ฌธ์ œ

์ฃผ์–ด์ง„ ์‚ผ๊ฐํ˜•์—์„œ ํ•ฉ์ด ๊ฐ€์žฅ ํด ๋•Œ์˜ ํ•ฉ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

2. ํ’€์ด

1์ฐจ : ๊ฐ๊ฐ์˜ ์œ„์น˜ ๋งˆ๋‹ค ์œ„, ์™ผ์ชฝ ์œ„๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐฉ์‹

2์ฐจ : ๋งจ ์™ผ์ชฝ ์ค„, ๋งจ ์˜ค๋ฅธ์ชฝ ์ค„, ๊ฐ€์šด๋ฐ๋กœ ๋‚˜๋ˆ„์–ด

๋งจ ์™ผ์ชฝ ์ค„์€ ์œ— ๋…€์„๋งŒ ๊ฒ€์‚ฌ

๋งจ ์˜ค๋ฅธ์ชฝ ์ค„์€ ์™ผ์ชฝ ์œ— ๋…€์„๋งŒ ๊ฒ€์‚ฌ

๊ฐ€์šด๋ฐ๋Š” ์œ— ๋…€์„, ์™ผ์ชฝ ์œ— ๋…€์„ ๋‘˜ ๋‹ค ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

1์ฐจ ๋ณด๋‹ค๋Š” 2์ฐจ์˜ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์ด ๋” ์ข‹์•˜๋‹ค.

 

3. ์ฝ”๋“œ

1์ฐจ -> ์ด์ค‘for๋ฌธ

๋”๋ณด๊ธฐ
import java.io.*;
import java.util.*;

class Solution {
    public int solution(int[][] triangle) {
        int ans = 0;
        int N = triangle.length;
        int[][] dp = new int[N][N];
        
        dp[0][0] = triangle[0][0];
        ans = dp[0][0];
        
        for (int i=1; i<N; i++) {
            for (int j=0; j<=i; j++) {
                if (j-1 >= 0) {
                    dp[i][j] = dp[i-1][j-1]+triangle[i][j];
                }
                if (dp[i-1][j] != 0) {
                    dp[i][j] = Math.max(dp[i][j], dp[i-1][j]+triangle[i][j]);
                }
                ans = Math.max(ans, dp[i][j]);
            }
        }
        
        return ans;
    }
}

2์ฐจ -> ๋‹จ์ผ for๋ฌธ

๋”๋ณด๊ธฐ
import java.io.*;
import java.util.*;

class Solution {
    public int solution(int[][] triangle) {
        int ans = 0;
        int N = triangle.length;
        int[][] dp = new int[N][N];
        
        dp[0][0] = triangle[0][0];
        ans = dp[0][0];
        
        for (int i=1; i<N; i++) {
            // ๋งจ ์™ผ์ชฝ ์ค„
            dp[i][0] = dp[i-1][0] + triangle[i][0];
            
            // ๋งจ ์˜ค๋ฅธ์ชฝ ์ค„
            dp[i][i] = dp[i-1][i-1] + triangle[i][i];
            
            // ๊ฐ€์šด๋ฐ
            for (int j=1; j< i; j++) {
                dp[i][j] = Math.max(dp[i-1][j-1], dp[i-1][j]) + triangle[i][j];
            }
        }
        
        for (int i=0; i<N; i++) {
            ans = Math.max(ans, dp[N-1][i]);
        }
        
        return ans;
    }
}

 

4. ์‚ฌ๋‹ด

๋ฌธ์ œ๋ฅผ ํ’€์—ˆ์–ด๋„ ์ด๊ฑฐ ๋‹ค์‹œ ์งœ๋ผ๋ฉด ๋ชป์งค ๊ฒƒ ๊ฐ™์€๋ฐ? ์‹ถ์€ ์ฝ”๋“œ๋Š” ์ง€์–‘ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ’€ ๋•Œ๋„ ํด๋ฆฐ์ฝ”๋“œ๋ฅผ ์‹ ๊ฒฝ์“ฐ๋ฉด์„œ ํ•˜์ž