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

[๋ฐฑ์ค€] 2579๋ฒˆ: ๊ณ„๋‹จ ์˜ค๋ฅด๊ธฐ(DP, ๋™์  ๊ณ„ํš๋ฒ•)

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

https://www.acmicpc.net/problem/2579

 

2579๋ฒˆ: ๊ณ„๋‹จ ์˜ค๋ฅด๊ธฐ

๊ณ„๋‹จ ์˜ค๋ฅด๊ธฐ ๊ฒŒ์ž„์€ ๊ณ„๋‹จ ์•„๋ž˜ ์‹œ์ž‘์ ๋ถ€ํ„ฐ ๊ณ„๋‹จ ๊ผญ๋Œ€๊ธฐ์— ์œ„์น˜ํ•œ ๋„์ฐฉ์ ๊นŒ์ง€ ๊ฐ€๋Š” ๊ฒŒ์ž„์ด๋‹ค. <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ™์ด ๊ฐ๊ฐ์˜ ๊ณ„๋‹จ์—๋Š” ์ผ์ •ํ•œ ์ ์ˆ˜๊ฐ€ ์“ฐ์—ฌ ์žˆ๋Š”๋ฐ ๊ณ„๋‹จ์„ ๋ฐŸ์œผ๋ฉด ๊ทธ ๊ณ„๋‹จ์— ์“ฐ์—ฌ ์žˆ๋Š” ์ ์ˆ˜๋ฅผ ์–ป๊ฒŒ ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด <๊ทธ๋ฆผ 2>์™€ ๊ฐ™์ด ์‹œ์ž‘์ ์—์„œ๋ถ€ํ„ฐ ์ฒซ ๋ฒˆ์งธ, ๋‘ ๋ฒˆ์งธ, ๋„ค ๋ฒˆ์งธ, ์—ฌ์„ฏ ๋ฒˆ์งธ ๊ณ„๋‹จ์„ ๋ฐŸ์•„ ๋„์ฐฉ์ ์— ๋„๋‹ฌํ•˜๋ฉด ์ด ์ ์ˆ˜๋Š” 10 + 20 + 25 + 20 = 75์ ์ด ๋œ๋‹ค. ๊ณ„๋‹จ ์˜ค๋ฅด๋Š” ๋ฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทœ์น™์ด ์žˆ๋‹ค. ๊ณ„๋‹จ์€ ํ•œ ๋ฒˆ์— ํ•œ ๊ณ„๋‹จ์”ฉ

www.acmicpc.net

์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		int stairs = Integer.parseInt(bf.readLine());
		int[] arr = new int[stairs+1];
		int[] dp = new int[stairs+1];
		
		for(int i=1; i<=stairs; i++)
			arr[i] = Integer.parseInt(bf.readLine());
		
		dp[1] = arr[1];			// ์ฒซ ๋ฒˆ์งธ ๊ณ„๋‹จ -> arr[1]์ด ์ตœ๋Œ€
		dp[2] = arr[1] + arr[2];// ๋‘ ๋ฒˆ์งธ ๊ณ„๋‹จ -> ์ฒซ๋ฒˆ์งธ + ๋‘๋ฒˆ์งธ ๊ณ„๋‹จ ํ•ฉ์ด ์ตœ๋Œ€
		
		for(int i=3; i<=stairs; i++) {
			dp[i] = Math.max(dp[i-3] + arr[i-1] + arr[i], dp[i-2] + arr[i]);
		}
		
		System.out.println(dp[stairs]);
		bf.close();
	}

}

ํ’€์ด

์ „ํ˜•์ ์ธ DP(๋™์  ๊ณ„ํš๋ฒ•)๋ฌธ์ œ๋‹ค ! 

DP๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ค‘๋ณต์œผ๋กœ ์—ฌ๋Ÿฌ๋ฒˆ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ์œ„ํ•ด์„œ ๊ณ ์•ˆ๋œ ๋ฐฉ๋ฒ•์ด๋‹ค.

๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๊ทœ์น™์„ ์ฐพ์•„์•ผ ํ•œ๋‹ค. ๋ฌธ์ œ์˜ ์กฐ๊ฑด์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

  1. ๊ณ„๋‹จ์€ ํ•œ ๋ฒˆ์— ํ•œ ๊ณ„๋‹จ์”ฉ ๋˜๋Š” ๋‘ ๊ณ„๋‹จ์”ฉ ์˜ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ํ•œ ๊ณ„๋‹จ์„ ๋ฐŸ์œผ๋ฉด์„œ ์ด์–ด์„œ ๋‹ค์Œ ๊ณ„๋‹จ์ด๋‚˜, ๋‹ค์Œ ๋‹ค์Œ ๊ณ„๋‹จ์œผ๋กœ ์˜ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค.
  2. ์—ฐ์†๋œ ์„ธ ๊ฐœ์˜ ๊ณ„๋‹จ์„ ๋ชจ๋‘ ๋ฐŸ์•„์„œ๋Š” ์•ˆ ๋œ๋‹ค. ๋‹จ, ์‹œ์ž‘์ ์€ ๊ณ„๋‹จ์— ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค.
  3. ๋งˆ์ง€๋ง‰ ๋„์ฐฉ ๊ณ„๋‹จ์€ ๋ฐ˜๋“œ์‹œ ๋ฐŸ์•„์•ผ ํ•œ๋‹ค.

์œ„์™€ ๊ฐ™๋‹ค. 

์ฒซ ๋ฒˆ์งธ๋Š” ํ•œ ๊ณ„๋‹จ or ๋‘ ๊ณ„๋‹จ๋งŒ ์˜ค๋ฅผ ์ˆ˜ ์žˆ๋Š” ์กฐ๊ฑด์ด๊ณ ,

๋‘ ๋ฒˆ์งธ๋Š” ์—ฐ์†๋ˆ ์„ธ ๊ฐœ์˜ ๊ณ„๋‹จ์„ ๋ชจ๋‘ ๋ฐŸ์œผ๋ฉด ์•ˆ๋œ๋‹ค -> ์ฒซ๋ฒˆ์งธ, ๋‘๋ฒˆ์งธ, ์„ธ๋ฒˆ์งธ... ์—ฐ์†์œผ๋กœ ์„ธ ๊ณ„๋‹จ์„ ๋ฐŸ์„ ์ˆ˜ ์—†๋‹ค.

์„ธ ๋ฒˆ์งธ๋Š” ๋งˆ์ง€๋ง‰ ๊ณ„๋‹จ์€ ๋ฌด์กฐ๊ฑด ๋ฐŸ์•„์•ผ ํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค.

 

๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„๋Œ€๋กœ ๊ณ„๋‹จ์ด ์—ฌ์„ฏ ๋ฒˆ์งธ๊นŒ์ง€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด, ์–ด๋–ป๊ฒŒ ์˜ค๋ฅด๋Š”๊ฒŒ ์ตœ๋Œ“๊ฐ’์ธ์ง€ ์ƒ๊ฐํ•ด๋ณด๋ฉด,

๊ณ„๋‹จ์ด ํ•œ ๊ฐœ ์ผ๋•Œ => ํ•œ ๊ณ„๋‹จ์ด ์ตœ๋Œ“๊ฐ’์ด๋‹ค.               dp[1] = arr[1]

๊ณ„๋‹จ์ด ๋‘ ๊ฐœ ์ผ๋•Œ => ํ•œ ๊ณ„๋‹จ + ๋‘ ๊ณ„๋‹จ์ด ์ตœ๋Œ“๊ฐ’์ด๋‹ค. dp[2] = arr[1] + arr[2]

๊ณ„๋‹จ์ด ์„ธ ๊ฐœ ์ด์ƒ์ผ๋•Œ ์ฃผ์–ด์ง„ ๋ฌธ์ œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ณด๋ฉด,

 * ์ผ๋‹จ ๋งˆ์ง€๋ง‰ ์—ฌ์„ฏ ๋ฒˆ์งธ ๊ณ„๋‹จ์€ ๋ฌด์กฐ๊ฑด ๋ฐŸ์•„์•ผ ํ•œ๋‹ค.

 * ์—ฌ์„ฏ ๋ฒˆ์งธ ๊ณ„๋‹จ ์ด์ „์„ ์ƒ๊ฐํ•ด๋ณด๋ฉด, ๋‘ ๊ฐ€์ง€์˜ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

    * 1) ๋งŒ์•ฝ ์—ฌ์„ฏ ๋ฒˆ์งธ ์ด์ „ ๋‹ค์„ฏ ๋ฒˆ์งธ ๊ณ„๋‹จ์„ ๋ฐŸ์•˜์„ ๊ฒฝ์šฐ์—๋Š” ๋„ค ๋ฒˆ์งธ ๊ณ„๋‹จ์€ ๋ฐŸ์„ ์ˆ˜ ์—†๋‹ค.

    * ๋”ฐ๋ผ์„œ ์„ธ ๋ฒˆ์งธ ๊ณ„๋‹จ๊นŒ์ง€์˜ ์ตœ๋Œ“๊ฐ’ + ๋‹ค์„ฏ ๋ฒˆ์งธ ๊ณ„๋‹จ + ์—ฌ์„ฏ ๋ฒˆ์งธ ๊ณ„๋‹จ์ด ์ตœ๋Œ“๊ฐ’์ด ๋œ๋‹ค.

    * 2) ๋งŒ์•ฝ ์—ฌ์„ฏ ๋ฒˆ์งธ ์ด์ „์— ๋„ค ๋ฒˆ์งธ ๊ณ„๋‹จ์„ ๋ฐŸ์•˜์„ ๊ฒฝ์šฐ์—๋Š” ๋‹ค์„ฏ ๋ฒˆ์งธ ๊ณ„๋‹จ์€ ๋ฐŸ์„ ์ˆ˜ ์—†๋‹ค.(by ์กฐ๊ฑด2)

    * ๋”ฐ๋ผ์„œ ๋„ค ๋ฒˆ์งธ ๊ณ„๋‹จ๊นŒ์ง€์˜ ์ตœ๋Œ“๊ฐ’ + ์—ฌ์„ฏ ๋ฒˆ์งธ ๊ณ„๋‹จ์ด ์ตœ๋Œ“๊ฐ’์ด ๋œ๋‹ค.

 

์œ„์˜ ๊ทœ์น™์„ ๊ธฐ์ค€์œผ๋กœ ์ ํ™”์‹์„ ์„ธ์›Œ๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

์œ„ 1)์˜ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

dp[3] + arr[5] + arr[6]

  -> dp[n-3] + arr[n-1] + arr[n]

 

์œ„ 2)์˜ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

dp[4] + arr[6]

  -> dp[n-2] + arr[n]

 

์œ„ ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ์˜ ์ˆ˜ ์ค‘์— ์ตœ๋Œ“๊ฐ’์„ ์ฐพ์•„์ฃผ๋ฉด n๋ฒˆ์งธ ๊ณ„๋‹จ์—์„œ์˜ ์ตœ๋Œ“๊ฐ’์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

 

DP ์ž์„ธํ•œ ํ’€์ด ์ฐธ๊ณ 

https://sundries-in-myidea.tistory.com/22

 

[๋ฐฑ์ค€ - 2579๋ฒˆ] ๊ณ„๋‹จ์˜ค๋ฅด๊ธฐ - ์ž๋ฐ”(JAVA) ์ •๋ฆฌ ๋ฐ ํ•ด์„ค

์˜ค๋Š˜์€ ๋Œ€ํ‘œ์  DP(Dynamic Programming)๋ฌธ์ œ์ธ ๊ณ„๋‹จ์˜ค๋ฅด๊ธฐ๋ฅผ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Dynamic Programming ์ดˆ๋ฐ˜์— ๊ฐ€์žฅ ๋งŽ์ด ์—ฐ์Šตํ•˜๊ฒŒ ๋˜๋Š” ๋ฌธ์ œ์ธ ๊ณ„๋‹จ์˜ค๋ฅด๊ธฐ๋Š” ์ฒ˜์Œ์— ์ ‘ํ• ๋•Œ๋Š” ์กฐ๊ธˆ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.. ์ผ๋‹จ ์ €๋Š” DP์— ๋Œ€ํ•ด์„œ..

sundries-in-myidea.tistory.com

 

์ด๊ฑฐ์‹œ ์ดˆ๋“ฑ๋ถ€ ๋ฌธ์ œ ,,,,,,,,,,,,,

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€