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

์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€

[๋ฐฑ์ค€ ์Šคํ„ฐ๋”” 9์ฃผ์ฐจ] 14501๋ฒˆ ํ‡ด์‚ฌ ์‹ค๋ฒ„3 - ์ž๋ฐ”(JAVA) / DFS/ DP

๐Ÿ“‘ ๋ฌธ์ œ

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

 

14501๋ฒˆ: ํ‡ด์‚ฌ

์ฒซ์งธ ์ค„์— ๋ฐฑ์ค€์ด๊ฐ€ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ด์ต์„ ์ถœ๋ ฅํ•œ๋‹ค.

www.acmicpc.net

๋”๋ณด๊ธฐ
๋”๋ณด๊ธฐ

๋ฌธ์ œ

์ƒ๋‹ด์›์œผ๋กœ ์ผํ•˜๊ณ  ์žˆ๋Š” ๋ฐฑ์ค€์ด๋Š” ํ‡ด์‚ฌ๋ฅผ ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

์˜ค๋Š˜๋ถ€ํ„ฐ N+1์ผ์งธ ๋˜๋Š” ๋‚  ํ‡ด์‚ฌ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ, ๋‚จ์€ N์ผ ๋™์•ˆ ์ตœ๋Œ€ํ•œ ๋งŽ์€ ์ƒ๋‹ด์„ ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

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

๊ฐ๊ฐ์˜ ์ƒ๋‹ด์€ ์ƒ๋‹ด์„ ์™„๋ฃŒํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ๊ธฐ๊ฐ„ Ti์™€ ์ƒ๋‹ด์„ ํ–ˆ์„ ๋•Œ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ธˆ์•ก Pi๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

N = 7์ธ ๊ฒฝ์šฐ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒ๋‹ด ์ผ์ •ํ‘œ๋ฅผ ๋ณด์ž.

              1์ผ                 2์ผ                 3์ผ          4์ผ               5์ผ              6์ผ                  7์ผ

ti 3 5 1 1 2 4 2
pi 10 20 10 20 15 40 200

1์ผ์— ์žกํ˜€์žˆ๋Š” ์ƒ๋‹ด์€ ์ด 3์ผ์ด ๊ฑธ๋ฆฌ๋ฉฐ, ์ƒ๋‹ดํ–ˆ์„ ๋•Œ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ธˆ์•ก์€ 10์ด๋‹ค. 5์ผ์— ์žกํ˜€์žˆ๋Š” ์ƒ๋‹ด์€ ์ด 2์ผ์ด ๊ฑธ๋ฆฌ๋ฉฐ, ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ธˆ์•ก์€ 15์ด๋‹ค.

์ƒ๋‹ด์„ ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๊ธฐ๊ฐ„์€ 1์ผ๋ณด๋‹ค ํด ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ชจ๋“  ์ƒ๋‹ด์„ ํ•  ์ˆ˜๋Š” ์—†๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ 1์ผ์— ์ƒ๋‹ด์„ ํ•˜๊ฒŒ ๋˜๋ฉด, 2์ผ, 3์ผ์— ์žˆ๋Š” ์ƒ๋‹ด์€ ํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค. 2์ผ์— ์žˆ๋Š” ์ƒ๋‹ด์„ ํ•˜๊ฒŒ ๋˜๋ฉด, 3, 4, 5, 6์ผ์— ์žกํ˜€์žˆ๋Š” ์ƒ๋‹ด์€ ํ•  ์ˆ˜ ์—†๋‹ค.

๋˜ํ•œ, N+1์ผ์งธ์—๋Š” ํšŒ์‚ฌ์— ์—†๊ธฐ ๋•Œ๋ฌธ์—, 6, 7์ผ์— ์žˆ๋Š” ์ƒ๋‹ด์„ ํ•  ์ˆ˜ ์—†๋‹ค.

ํ‡ด์‚ฌ ์ „์— ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒ๋‹ด์˜ ์ตœ๋Œ€ ์ด์ต์€ 1์ผ, 4์ผ, 5์ผ์— ์žˆ๋Š” ์ƒ๋‹ด์„ ํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ, ์ด๋•Œ์˜ ์ด์ต์€ 10+20+15=45์ด๋‹ค.

์ƒ๋‹ด์„ ์ ์ ˆํžˆ ํ–ˆ์„ ๋•Œ, ๋ฐฑ์ค€์ด๊ฐ€ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ˆ˜์ต์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N (1 ≤ N ≤ 15)์ด ์ฃผ์–ด์ง„๋‹ค.

๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— Ti์™€ Pi๊ฐ€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด์„œ ์ฃผ์–ด์ง€๋ฉฐ, 1์ผ๋ถ€ํ„ฐ N์ผ๊นŒ์ง€ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ Ti ≤ 5, 1 ≤ Pi ≤ 1,000)

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๋ฐฑ์ค€์ด๊ฐ€ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ด์ต์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

 

 

 

 

 

 

 

โœ’๏ธ ํ’€์ด

 ์ผ๋ฐ˜์ ์ธ DFS ํ’€์ด์™€ ์ข€ ๋” ๋น ๋ฅธ DP ํ’€์ด, ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

 ๊ฐœ์ธ์ ์œผ๋กœ DFS๊ฐ€ ๋” ์ง๊ด€์ ์ด๊ณ  ์™€๋‹ฟ์ง€๋งŒ.....๋‚œ๋„๊ฐ€ ์‹ค๋ฒ„3์ด๋‹ˆ ๊ทธ๋‚˜๋งˆ ํ†ต๊ณผ๋˜์ง€, ์กฐ๊ธˆ๋งŒ ์˜ฌ๋ผ๊ฐ€๋ฉด ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚  ๊ฒƒ์ด ๋ป”ํ–ˆ๊ธฐ์—, ํ•  ์ˆ˜ ์—†์ด DP๋กœ๋„ ํ’€์—ˆ๋‹ค. (ใ… ใ… ) ๋‚œ DP๊ฐ€ ํ•ญ์ƒ ์–ด๋ ต๋‹ค....

 

 

 

โœ”๏ธ DFS

 โ—ป๏ธ ์ฒซ๋‚ ๋ถ€ํ„ฐ ํ˜„์žฌ ์ผ์„ ์„ ํƒํ•˜๋Š” ๊ฒฝ์šฐ/ ์•ˆํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋‚˜๋ˆ ์„œ ๊นŠ์ดํƒ์ƒ‰์„ ํ•œ๋‹ค.

 โ—ป๏ธ ํ˜„์žฌ ์ผ์„ ์„ ํƒํ•  ๊ฒฝ์šฐ, ์ผ์„ ์™„๋ฃŒํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ํ‡ด์‚ฌ์ผ์„ ๋„˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค. ๋„˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๋ฐ›์„ ๊ธˆ์•ก์„ ์ด์ต์— ๋”ํ•œ ํ›„ ํ˜„์žฌ ์ผ์„ ๋งˆ์ณค์„ ๋•Œ์˜ ์ผ์ž๋กœ ๋„˜์–ด๊ฐ€์„œ DFS ํƒ์ƒ‰์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

  ํ˜„์žฌ ์ผ์„ ์„ ํƒํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ, ์ด์ต์€ ๊ทธ๋Œ€๋กœ ๋‘” ์ฑ„ ๋‹ค์Œ๋‚ ๋กœ ๋„˜์–ด๊ฐ€ DFS ํƒ์ƒ‰์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

 โ—ป๏ธ ํ‡ด์‚ฌ์ผ์— ๋‹ค๋‹ค๋ฅด๋ฉด ํ˜„์žฌ๊นŒ์ง€ ๊ณ„์‚ฐํ•œ ์ด์ต์„ ๋น„๊ตํ•˜์—ฌ ํฐ ์ชฝ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

 

 

 

โœ”๏ธ DP

 ๐Ÿ’ก ์—ญ์ˆœ์œผ๋กœ ์ ‘๊ทผํ•œ๋‹ค.

 ์—ญ์ˆœ์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ฐœ๋…์€ ํ•˜๋‚˜์”ฉ ์ฐจ๋ถ„ํžˆ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ๋Œ๋ ค๋ณด์ง€ ์•Š์œผ๋ฉด ๋‹จ๋ฒˆ์— ์ดํ•ดํ•˜๊ธฐ๊ฐ€ ํž˜๋“ค๋‹ค.

 โ—ป๏ธ ํ˜„์žฌ ์ผ์„ ์„ ํƒํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ, ํ˜„์žฌ์˜ ์ด์ต์€ ๋‹ค์Œ๋‚ ์˜ ์ด์ต์ด ๋œ๋‹ค. (ํ˜„์žฌ ์ผ์„ ํ•˜์ง€ ์•Š์œผ๋ฉด ๋‹ค์Œ๋‚  ์ผ์„ ํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ)

 โ—ป๏ธ ํ˜„์žฌ ์ผ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ, (ํ˜„์žฌ ์ผ์˜ ์ด์ต์— ์ผ์„ ์™„๋ฃŒํ•œ ๋‚ ์˜ ์ด์ต์„ ๋”ํ•œ ๊ฐ’-์ผ์„ ์ด์–ด์„œ ํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ)๊ณผ (์ด ์ผ์„ ํ•˜์ง€ ์•Š๊ณ  ๋‹ค์Œ๋‚  ์ผ์„ ํ–ˆ์„ ๊ฒฝ์šฐ์˜ ๊ฐ’) ์ค‘ ํฐ ๊ฐ’์ด ํ˜„์žฌ์˜ ์ด์ต์ด ๋œ๋‹ค.

 

 ๐Ÿ’ก ๋‚˜๋Š” N์ผ์ด ์žˆ์„ ๊ฒฝ์šฐ 1~N์œผ๋กœ ์‹œ์ž‘ํ•˜๊ฒŒ ๋งž์ท„๊ธฐ ๋•Œ๋ฌธ์—, ํŠน์ • ์ผ X๋ถ€ํ„ฐ D์ผ์„ ์ผํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด X ๋‹น์ผ์„ ํ•˜๋ฃจ๋กœ ์ณ์ค˜์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ณ„์‚ฐ์‹œ์— X-1+D๋กœ ๊ณ„์‚ฐ์„ ํ•˜๊ฒŒ ๋œ๋‹ค.

 ์˜ˆ๋ฅผ ๋“ค์–ด ์ด 7์ผ์ด ์žˆ์„ ๊ฒฝ์šฐ, ๋งˆ์ง€๋ง‰ ๋‚  7์ผ์— 1์ผ์„ ์ผํ•œ๋‹ค๋ฉด 7-1+1=7๋กœ ํ‡ด์‚ฌ์ผ์„ ๋„˜๊ธฐ์ง€ ์•Š๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 

 

 

 

 

 

 

๐Ÿ’ป ์†Œ์Šค์ฝ”๋“œ: ์ž๋ฐ”(Java)

public class Main_๋ฐฑ์ค€_14501_ํ‡ด์‚ฌ_์‹ค๋ฒ„3 {

	static int N, result=0;
	static int[][] day;
	static int[] dp;
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		N = Integer.parseInt(br.readLine());
		day = new int[N+1][2];
		dp = new int[N];
		for (int i = 1; i <= N; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			day[i][0] = Integer.parseInt(st.nextToken());
			day[i][1] = Integer.parseInt(st.nextToken());
		}//input
		
		dfs(1,0);
		System.out.println(result);
	}//end of main
	
	private static void dfs(int idx, int profit) {	
		if(idx>N) {
			result = Math.max(result, profit);
			return;
		}
		int d = day[idx][0];
		int p = day[idx][1];
		if(idx+d-1<=N) dfs(idx+d, profit+p);
		dfs(idx+1, profit);
	}//end of dfs
	
	private static void dp() {
		for (int i = N; i >= 1; i--) { //๋งˆ์ง€๋ง‰ ๋‚ ๋ถ€ํ„ฐ ํ™•์ธ
			int d = day[i][0];
			int p = day[i][1];
			if(i-1+d <= N) { // i+d<=N+1์ด์—ˆ๋Š”๋ฐ ๋” ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๊ณ ์ณค๋‹ค
				dp[i] = Math.max(p+dp[i+d], dp[i+1]); 
			}else {
				dp[i] = dp[i+1];
			}
		}
	}//end of dp
}//end of class

 

 

 

 

 

 

 

 

 

 

๐Ÿ’Ž ๐Ÿ’Ž ๐Ÿ’Ž

 

 

๏ผฐ๏ฝ๏ฝ“๏ฝ”๏ฝ…๏ฝ„ ๏ผข๏ฝ™ ๏ผณ๏ผก๏ผน

๐˜›๐˜ฉ๐˜ข๐˜ฏ๐˜ฌ๐˜ด ๐˜ง๐˜ฐ๐˜ณ ๐˜ณ๐˜ฆ๐˜ข๐˜ฅ๐˜ช๐˜ฏ๐˜จ