05-16 14:15
Recent Posts
Recent Comments
๊ด€๋ฆฌ ๋ฉ”๋‰ด

miinsun

[Programmers] ๋•…๋”ฐ๋จน๊ธฐ - JAVA (Dynamic Programming) ๋ณธ๋ฌธ

Algorithm/Programmers

[Programmers] ๋•…๋”ฐ๋จน๊ธฐ - JAVA (Dynamic Programming)

miinsun 2022. 5. 19. 20:46

 

๐Ÿ’ฌ ๋ฌธ์ œ ์„ค๋ช…

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

์˜ˆ๋ฅผ ๋“ค๋ฉด,
| 1 | 2 | 3 | 5 |
| 5 | 6 | 7 | 8 |
| 4 | 3 | 2 | 1 |
๋กœ ๋•…์ด ์ฃผ์–ด์กŒ๋‹ค๋ฉด, 1ํ–‰์—์„œ ๋„ค๋ฒˆ์งธ ์นธ (5)๋ฅผ ๋ฐŸ์•˜์œผ๋ฉด, 2ํ–‰์˜ ๋„ค๋ฒˆ์งธ ์นธ (8)์€ ๋ฐŸ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰ ํ–‰๊นŒ์ง€ ๋ชจ๋‘ ๋‚ด๋ ค์™”์„ ๋•Œ, ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ ์ˆ˜์˜ ์ตœ๋Œ€๊ฐ’์„ returnํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

์œ„ ์˜ˆ์˜ ๊ฒฝ์šฐ, 1ํ–‰์˜ ๋„ค๋ฒˆ์งธ ์นธ (5), 2ํ–‰์˜ ์„ธ๋ฒˆ์งธ ์นธ (7), 3ํ–‰์˜ ์ฒซ๋ฒˆ์งธ ์นธ (4) ๋•…์„ ๋ฐŸ์•„ 16์ ์ด ์ตœ๊ณ ์ ์ด ๋˜๋ฏ€๋กœ 16์„ return ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

๐Ÿšซ ์ œํ•œ ์‚ฌํ•ญ

  • ํ–‰์˜ ๊ฐœ์ˆ˜ N : 100,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜
  • ์—ด์˜ ๊ฐœ์ˆ˜๋Š” 4๊ฐœ์ด๊ณ , ๋•…(land)์€ 2์ฐจ์› ๋ฐฐ์—ด๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.
  • ์ ์ˆ˜ : 100 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜

 

๐Ÿ”จ ์ž…์ถœ๋ ฅ ์˜ˆ

โ€‹

๐Ÿ’ป Solution.java

์œ„์˜ ์˜ˆ์ œ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ ํ™”์‹์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

  • dy[i][j] = (๋ณธ์ธ ์—ด์„ ์ œ์™ธํ•œ ๊ฐ€์žฅ ํฐ dy[i-1][j] + land[i][j])
  • ์ด๋•Œ dy[0][j]๋Š” ์ดˆ๊ธฐ land[0][j] ๊ฐ’์œผ๋กœ ์„ธํŒ…ํ•ด์ค€๋‹ค.
class Solution {
    int solution(int[][] land) {
		int answer = 0;
		int[][] dp = new int[land.length][4];

		// ๋งจ ์ฒซ ํ–‰ ์„ธํŒ…
		for(int i = 0; i < 4; i++) {
			dp[0][i] = land[0][i];
		}
		
		for (int i = 1; i < land.length; i++) {
			for (int j = 0; j < 4; j++) {
            	// ์ด์ „ ํ–‰์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’ ์ฐพ๊ธฐ
				int max = 0;
				for(int k = 0; k < 4; k++) {
					if(j != k) // ๊ฐ™์€ ์—ด์€ ์ œ์™ธ 
                    	max = Math.max(max, dp[i - 1][k]);
				}
				
                // ๊ฐ€์žฅ ํฐ ๊ฐ’์— ํ˜„์žฌ ๋•… ๊ฐ’ ๋”ํ•ด์ฃผ๊ธฐ
				dp[i][j] = max + land[i][j]; 
			}
		}

		// ๋งˆ์ง€๋ง‰ ํ–‰์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’์ด ๋‹ต์ด ๋œ๋‹ค.
		for(int i : dp[land.length - 1]) {
			answer = Math.max(answer, i);
		}
				
		return answer;
	}
}

 

Comments