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

Algorithm

[Algorithm/Java][ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋•…๋”ฐ๋จน๊ธฐ

๋ฐ˜์‘ํ˜•

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋•…๋”ฐ๋จน๊ธฐ

https://programmers.co.kr/learn/courses/30/lessons/12913

๋ฌธ์ œ ์ ‘๊ทผ

์ฒ˜์Œ์— ์ ‘๊ทผํ•  ๋•Œ dfs๋กœ ํ’€์–ด์•ผ ๋ ๊นŒ? dp๋กœ ํ’€์–ด์•ผ ๋ ๊นŒ? ๊ณ ๋ฏผ์ด ๋˜์—ˆ๋Š”๋ฐ dfs๋กœ ์ฝ”๋“œ ์งœ๋ ค๊ณ  ํ•˜๋‹ˆ๊นŒ ๊ทธ๋ƒฅ ๋ฐ”๋กœ ๋ง‰ํ˜€์„œ dp๋กœ ์ƒ๊ฐํ•ด๋ดค๋‹ค.
์ผ๋‹จ ์ ‘๊ทผ ๋ฐฉ์‹์€ ํ˜„์žฌ ๋‚ด๊ฐ€ ๋ฐŸ์€ ๋•…๊ณผ ๊ฐ™์€ ์—ด์„ ์ œ์™ธํ•˜๊ณ  ๋ฐ”๋กœ ์ „ ํ–‰์—์„œ ์ตœ๊ณ ์ ์ˆ˜๋ฅผ ๊ฐ€์ง„ ๊ณณ์„ ๋ฐŸ์•„์•ผ ์ตœ๊ณ  ์ ์ˆ˜๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ๋•…์„ ๋ฐŸ์•„๊ฐˆ์ˆ˜ ์žˆ๋‹ค.
๊ทธ๋ž˜์„œ dp๋ฐฐ์—ด์— ๊ทธ ์œ„์น˜์— ํ•ด๋‹นํ•˜๋Š” ์ตœ๊ณ ์ ์ˆ˜๋ฅผ ์ €์žฅํ•˜๊ณ , ๋งˆ์ง€๋ง‰ ํ–‰์ค‘์—์„œ ์ตœ๊ณ  ์ ์ˆ˜๊ฐ€ ์ตœ์ข… ๋‹ต์ด ๋œ๋‹ค.

Code

class Solution {
    int solution(int[][] land) {
        int answer = 0;
        int[][] dp = new int[land.length][4];  // ๊ฐ ์—ด๋งˆ๋‹ค ์ตœ๊ณ ์ ์ˆ˜๋ฅผ ๊ธฐ๋กํ•  ๋ฐฐ์—ด์ด๋‹ค.
        dp[0] = land[0]; // ์ฒซ๋ฒˆ์งธ ํ–‰์€ ๊ทธ๋Œ€๋กœ๊ฐ€ ์ตœ๊ณ  ์ ์ˆ˜์ด๋‹ค.
        for(int i = 1; i<land.length; i++){
            for(int j = 0; j<4; j++){
                for(int k = 0; k<4; k++){
                    if(k==j) continue;
                    // ์ด์ „ ํ–‰์—์„œ ํ˜„์žฌ ์—ด์„ ์ œ์™ธํ•˜๊ณ  ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์ฐพ๋Š”๋‹ค.
                    dp[i][j] = Math.max(dp[i-1][k]+land[i][j], dp[i][j]);
                }
            }
        }
        // ๋งˆ์ง€๋ง‰ ํ–‰์—์„œ ๊ฐ€์žฅ ์ ์ˆ˜๊ฐ€ ๋†’์€ ์—ด์„ ์ฐพ๋Š”๋‹ค.
        for(int score: dp[land.length-1]){
            answer = Math.max(score,answer);
        }
        return answer;
    }
}

์–ด๋ ค์› ๋˜ ์  / ๋ฐฐ์šด ์  / ๋Š๋‚€ ์ 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค level 2 ๋‹จ๊ณ„์ธ๋ฐ ์ž˜ ํ’€๋ ค์„œ ๊ธฐ๋ถ„์ด ์ข‹์•˜๋‹ค. ํ•œ๋ฐฉ์— ์ •๋‹ต์ด๋‹ค๐Ÿ‘

๋ฐ˜์‘ํ˜•