https://www.acmicpc.net/problem/1912
์ฝ๋
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๋ถํฐ ์๋กญ๊ฒ ์ฐ์ํฉ์ ์์ํด์ผ ํ๋ค.
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค[Java] - ์ ํ๋ฒํธ ๋ชฉ๋ก(ํด์) (0) | 2020.03.05 |
---|---|
[๋ฐฑ์ค] 1748๋ฒ: ์ ์ด์ด ์ฐ๊ธฐ 1(๊ตฌํ) (0) | 2020.03.05 |
[๋ฐฑ์ค] 3985๋ฒ: ๋กค ์ผ์ดํฌ(๊ตฌํ, ์๋ฎฌ๋ ์ด์ ) (0) | 2020.03.05 |
[Codeforces] 509A: Maximum in Table (0) | 2020.03.05 |
[๋ฐฑ์ค] 1551๋ฒ: ์์ด์ ๋ณํ(์ํ, ์๋ฎฌ๋ ์ด์ ) (0) | 2020.03.04 |
๋๊ธ