Algorithm/ํ•ญํ•ด99(4๊ธฐ)

99ํด๋Ÿฝ ์ฝ”ํ…Œ ์Šคํ„ฐ๋”” 30์ผ์ฐจ TIL : Dynamic Programming(๋ฐฑ์ค€- ์ƒ์ž๋„ฃ๊ธฐ)

_dear 2024. 11. 27. 10:50

 

 

๐Ÿ”Ž ๋ฌธ์ œ

 

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

 

 

 

 

 


๐Ÿ’ก ํ’€์ด

 

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

public class Main {
	
	public static Long[] arr= new Long[100];

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb= new StringBuilder();
		int T= Integer.parseInt(br.readLine());
		
		for(int i=0;i<T;i++) {
			int n= Integer.parseInt(br.readLine());
			sb.append(p(n)+"\n");
		}

		System.out.println(sb);
	}

	private static Long p(int n) {
		if(n>=1&&n<=3) {
			return 1L;
		}else if(n>=4&&n<=5) {
			return 2L;
		}else if(arr[n-1]==null){
			arr[n-1]= p(n-1)+p(n-5);
		}
		
		return arr[n-1];
	}

}

 

 

 

๐Ÿ“Œ ์˜ค๋Š˜์˜ ํšŒ๊ณ 

 

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Dynamic Programming, DP)

: ๋ณต์žกํ•œ ๋ฌธ์ œ๋ฅผ ๋‹จ์ˆœํ•œ ํ•˜์œ„ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„๊ณ , ๊ฐ ํ•˜์œ„ ๋ฌธ์ œ์˜ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜์—ฌ ๋™์ผํ•œ ํ•˜์œ„ ๋ฌธ์ œ๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„ ๊ธฐ๋ฒ•

- ์ผ๋ฐ˜์ ์œผ๋กœ ์ค‘๋ณต๋œ ๊ณ„์‚ฐ๊ณผ ๋ถ€๋ถ„ ๋ฌธ์ œ์˜ ์ตœ์  ๋ถ€๋ถ„ ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉ

  1. ์ตœ์  ๋ถ€๋ถ„ ๊ตฌ์กฐ (Optimal Substructure)
    ๋ฌธ์ œ์˜ ์ตœ์  ํ•ด๊ฒฐ์ฑ…์ด ํ•˜์œ„ ๋ฌธ์ œ๋“ค์˜ ์ตœ์  ํ•ด๊ฒฐ์ฑ…์œผ๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ๋Š” ์„ฑ์งˆ
    ์˜ˆ: ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์—์„œ F(n) = F(n-1) + F(n-2)
  2. ์ค‘๋ณต๋˜๋Š” ํ•˜์œ„ ๋ฌธ์ œ (Overlapping Subproblems)
    ๋™์ผํ•œ ํ•˜์œ„ ๋ฌธ์ œ๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜๋ณตํ•ด์„œ ๊ณ„์‚ฐ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ด ๊ฒฝ์šฐ, ์ค‘๊ฐ„ ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๋ฉด ํšจ์œจ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
    ์˜ˆ: ์žฌ๊ท€์ ์œผ๋กœ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•  ๋•Œ, ๋™์ผํ•œ ๊ณ„์‚ฐ์ด ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐœ์ƒ.
  3. ๋ฉ”๋ชจ์ด์ œ์ด์…˜ (Memoization)
    ํ•˜ํ–ฅ์‹(Top-Down) ์ ‘๊ทผ ๋ฐฉ์‹์œผ๋กœ, ์ด๋ฏธ ๊ณ„์‚ฐํ•œ ํ•˜์œ„ ๋ฌธ์ œ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ(๋ฐฐ์—ด ๋“ฑ)์— ์ €์žฅํ•˜์—ฌ ์ค‘๋ณต ๊ณ„์‚ฐ์„ ๋ฐฉ์ง€ํ•œ๋‹ค.
  4. ํƒ€๋ทธ๋ ˆ์ด์…˜ (Tabulation)
    ์ƒํ–ฅ์‹(Bottom-Up) ์ ‘๊ทผ ๋ฐฉ์‹์œผ๋กœ, ์ž‘์€ ๋ฌธ์ œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ํ’€์–ด๋‚˜๊ฐ€๋ฉฐ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•ด ํฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.