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

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

by ์ฃผ๋ฐœ2 2020. 1. 22.
๋ฐ˜์‘ํ˜•

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

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๋•…๋”ฐ๋จน๊ธฐ | ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

๋•…๋”ฐ๋จน๊ธฐ ๊ฒŒ์ž„์„ ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋•…๋”ฐ๋จน๊ธฐ ๊ฒŒ์ž„์˜ ๋•…(land)์€ ์ด Nํ–‰ 4์—ด๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ๋ชจ๋“  ์นธ์—๋Š” ์ ์ˆ˜๊ฐ€ ์“ฐ์—ฌ ์žˆ์Šต๋‹ˆ๋‹ค. 1ํ–‰๋ถ€ํ„ฐ ๋•…์„ ๋ฐŸ์œผ๋ฉฐ ํ•œ ํ–‰์”ฉ ๋‚ด๋ ค์˜ฌ ๋•Œ, ๊ฐ ํ–‰์˜ 4์นธ ์ค‘ ํ•œ ์นธ๋งŒ ๋ฐŸ์œผ๋ฉด์„œ ๋‚ด๋ ค์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, ๋•…๋”ฐ๋จน๊ธฐ ๊ฒŒ์ž„์—๋Š” ํ•œ ํ–‰์”ฉ ๋‚ด๋ ค์˜ฌ ๋•Œ, ๊ฐ™์€ ์—ด์„ ์—ฐ์†ํ•ด์„œ ๋ฐŸ์„ ์ˆ˜ ์—†๋Š” ํŠน์ˆ˜ ๊ทœ์น™์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, | 1 | 2 | 3 | 5 | | 5 | 6 | 7 | 8 | | 4 | 3 | 2 | 1 | ๋กœ ๋•…์ด ์ฃผ์–ด์กŒ๋‹ค๋ฉด

programmers.co.kr

 

 

ํ’€์ด

DP๋ฌธ์ œ๋‹ค. ์–ด๋–ป๊ฒŒ ํ’€์ง€ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€ ๊ฐ ์—ด๋งˆ๋‹ค ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์ฐพ๊ณ , ๋™์ผํ•œ ์—ด์ด ์•„๋‹์‹œ ๋”ํ•ด์ฃผ๋Š” ์‹์œผ๋กœ ์ƒ๊ฐ์„ ํ–ˆ๋‹ค... ๊ฒฐ๊ตญ ๋„ˆ๋ฌด ๋ณต์žกํ•ด์ง€๊ณ  ํ’€์ง€๋ชปํ•ด ์ฐพ์•„๋ณด๋‹ˆ DP๋ฅผ ์ด์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ๋‹ค.

DP๋ž€?

 

 

ํ˜„์žฌ ํ–‰์—์„œ ๋ฐŸ์„ ์—ด์€ ์ „์˜ ์—ด๊ณผ ๋™์ผํ•˜๊ฒŒ ๋ฐŸ์„ ์ˆ˜ ์—†๋‹ค.

1 2 3 5

5 6 7 8

์œ„์™€ ๊ฐ™์ด์žˆ์„๋•Œ, ์ฒซ๋ฒˆ์งธ ํ–‰์—์„œ 5๋ฅผ ๋ฐŸ์œผ๋ฉด ๋‘๋ฒˆ์งธ ํ–‰์—์„  8์„ ๋ฐŸ์„ ์ˆ˜ ์—†๋‹ค.

 

๊ฐ ํ–‰์˜ ์—ด๋งˆ๋‹ค ์ด์ „๊นŒ์ง€์˜ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•ด๊ฐ€๋Š” ์‹์œผ๋กœ ํ‘ผ๋‹ค.

i๋ฒˆ์งธ ํ–‰์˜ ๊ฐ’๋“ค์— i-1๋ฒˆ์งธ๊นŒ์ง€ ํ–‰๋“ค์˜ ๊ฐ’๋“ค์˜ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•ด๊ฐ€๋Š” ์‹์ด๋‹ค.

๋‘๋ฒˆ์งธ ํ–‰(5, 6, 7, 8)๋ถ€ํ„ฐ ์ด์ „ ํ–‰์˜ ์ตœ๋Œ“๊ฐ’๋“ค์˜ ํ•ฉ์„ ๋”ํ•œ๋‹ค.

 

land[2][0] ์— ์˜ฌ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ“๊ฐ’์€

land[2][0] + land[1][1] = 7

land[2][0] + land[1][2] = 8

land[2][0] + land[1][3] = 10

์œ„์— ์„ธ ๊ฐ’์ค‘ ๊ฐ€์žฅ ํฐ ๊ฐ’์ธ 10์ด๋‹ค.

 

land[2][1] ์— ์˜ฌ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ“๊ฐ’์€

land[2][1] + land[1][0] = 7

land[2][1] + land[1][2] = 9

land[2][1] + land[1][3] = 11

์œ„์— ์„ธ ๊ฐ’์ค‘ ๊ฐ€์žฅ ํฐ๊ฐ’์ธ 11์ด๋‹ค.

 

land[2][2] ์— ์˜ฌ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ“๊ฐ’์€

land[2][2] + land[1][0] = 8

land[2][2] + land[1][1] = 9

land[2][2] + land[1][3] = 12

์œ„์— ์„ธ ๊ฐ’์ค‘ ๊ฐ€์žฅ ํฐ๊ฐ’์ธ 12์ด๋‹ค.

 

land[2][3] ์— ์˜ฌ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ“๊ฐ’์€

land[2][3] + land[1][0] = 9

land[2][3] + land[1][1] = 10

land[2][3] + land[1][2] = 11

์œ„์— ์„ธ ๊ฐ’์ค‘ ๊ฐ€์žฅ ํฐ๊ฐ’์ธ 11์ด๋‹ค.

 

๋”ฐ๋ผ์„œ ์œ„์™€ ๊ฐ™์ด ๋œ๋‹ค.

์•„๋ž˜๋กœ๋„ ๊ณ„์† ๋˜‘๊ฐ™์€ ์ž‘์—…์„ ํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

๋ชจ๋“  ์ž‘์—…์ด ๋๋‚˜๋ฉด, 0, 1, 2, 3 ๋ฒˆ์งธ ์—ด ์ค‘ ๊ฐ€์žฅ ํฐ๊ฐ’์„ ๊ณ ๋ฅด๋ฉด ๋œ๋‹ค.

 

PS. ๊ฐ ํ–‰๋ณ„๋กœ ์ •๋ ฌ์„ ํ•˜๊ณ , ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ํ–‰์˜ 3๋ฒˆ์งธ ๊ฐ’์„ ์ถœ๋ ฅํ•ด๋„ ์ •๋‹ต์ด๋‹ค.

 

import java.util.*;

class Solution {
	public static int solution(int[][] land) {
		
		for(int i=1; i<land.length; i++) {
			land[i][0] += Math.max(land[i-1][1], Math.max(land[i-1][2], land[i-1][3]));
			land[i][1] += Math.max(land[i-1][0], Math.max(land[i-1][2], land[i-1][3]));
			land[i][2] += Math.max(land[i-1][1], Math.max(land[i-1][0], land[i-1][3]));
			land[i][3] += Math.max(land[i-1][0], Math.max(land[i-1][1], land[i-1][2]));
		}
        
        for(int i=0; i<land.length; i++){
            Arrays.sort(land[i]);
        }
        return land[land.length-1][3];
		//return Math.max(land[land.length-1][0], Math.max(land[land.length-1][1], Math.max(land[land.length-1][2], land[land.length-1][3])));
	}
}
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€