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

[๋ฐฑ์ค€] 1912๋ฒˆ: ์—ฐ์†ํ•ฉ(DP)

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

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

 

1912๋ฒˆ: ์—ฐ์†ํ•ฉ

์ฒซ์งธ ์ค„์— ์ •์ˆ˜ n(1 ≤ n ≤ 100,000)์ด ์ฃผ์–ด์ง€๊ณ  ๋‘˜์งธ ์ค„์—๋Š” n๊ฐœ์˜ ์ •์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆ˜์—ด์ด ์ฃผ์–ด์ง„๋‹ค. ์ˆ˜๋Š” -1,000๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 1,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ •์ˆ˜์ด๋‹ค.

www.acmicpc.net

์ฝ”๋“œ

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

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(bf.readLine());
		int[] arr = new int[n];
		StringTokenizer st = new StringTokenizer(bf.readLine());
		for(int i=0; i<n; i++)
			arr[i] = Integer.parseInt(st.nextToken());
		
		int[] dp = new int[n];
		int max = arr[0];
		dp[0] = arr[0];
		for(int i=1; i<n; i++) {
			dp[i] = Math.max(dp[i-1] + arr[i] , arr[i]);
			max = Math.max(max, dp[i]);
		}
		
		System.out.println(max);
		bf.close();
	}

}

ํ’€์ด

์œ„ ๋ฌธ์ œ๋ฅผ ์™„์ „ ํƒ์ƒ‰์œผ๋กœ๋„ ํ’€ ์ˆ˜ ์žˆ๋‹ค.

์ˆ˜์—ด์—์„œ n๋ฒˆ์งธ ์ˆ˜ ๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰๊นŒ์ง€ ์—ฐ์†์ ์œผ๋กœ ๋”ํ•ด๊ฐ€๋ฉฐ ๋น„๊ตํ•ด์„œ ๋” ํฐ ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•˜๋ฉด,

2์ค‘ for๋ฌธ์œผ๋กœ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š”๋ฐ, ๋ฌธ์ œ์—์„œ n์˜ ๋ฒ”์œ„๋Š” 100,000 ๊นŒ์ง€๋‹ค

๋”ฐ๋ผ์„œ O(100,100 * 100,100) ์„ํ•˜๋ฉด 100์–ต์ด ๋‚˜์™€ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๋”ฐ๋ผ์„œ DP ๋ฌธ์ œ๋ผ๋Š”๊ฒƒ์— ์ดˆ์ ์„ ๋งž์ถฐ ํ•ด๊ฒฐํ–ˆ๋‹ค.

 

dp[i] = i๊ฐœ ์ž๋ฆฌ์ˆ˜์˜ ์—ฐ์†ํ•ฉ์„ ํ•œ ๊ฒƒ๋“ค ์ค‘ ๊ฐ€์žฅ ํฐ ์—ฐ์†ํ•ฉ์ด๋ผ๊ณ  ํ–ˆ์„๋•Œ,

๊ฒฝ์šฐ์˜์ˆ˜๋Š” ๋‹ค์Œ 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

1) i์ž๋ฆฌ์— ํ•ด๋‹นํ•˜๋Š” ์ˆซ์ž๊ฐ€ ์ด์ „ ์—ฐ์†ํ•ฉ์— ์†ํ•˜๋Š” ๊ฒฝ์šฐ 

2) ์†ํ•˜์ง€ ์•Š๊ณ  ์ƒˆ๋กญ๊ฒŒ ์—ฐ์†ํ•ฉ์„ ์‹œ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ

 

1)์˜ ๊ฒฝ์šฐ dp[i] = dp[i-1] + arr[i] ์ด๊ณ ,

2)์˜ ๊ฒฝ์šฐ dp[i] = arr[i] ์ด๋‹ค.

 

์ฆ‰, 2)์˜ ๋œป์€ ์ด์ „๊นŒ์ง€์˜ ํ•ฉ์ด ์Œ์ˆ˜๋ฉด ์ƒˆ๋กœ ๋”ํ•˜๋Š” ๊ฐ’์€ ๋ฌด์กฐ๊ฑด ํ˜„์žฌ๋ณด๋‹ค ์ž‘๋‹ค์ธ๋ฐ,

๋งŒ์•ฝ [-1, 2, -4, 10] ์˜ ๊ฒฝ์šฐ dp[3]์„ ๊ตฌํ•ด๋ณด์ž.

 

1) dp[3] = dp[2] + arr[3] 

2) dp[3] = arr[3] 

์œ„ ๋‘ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ฒซ๋ฒˆ์งธ ๊ฒฝ์šฐ, ์Œ์ˆ˜๊ฐ€ ๋‚˜์˜ค๋ฏ€๋กœ ๋ฌด์กฐ๊ฑด arr[3]๋ณด๋‹ค ์ž‘๊ธฐ ๋•Œ๋ฌธ์— 10๋ถ€ํ„ฐ ์ƒˆ๋กญ๊ฒŒ ์—ฐ์†ํ•ฉ์„ ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค.

 

 

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€