๐๋ฌธ์ ์ค๋ช
N๊ฐ์ ์คํฐ์ปค๊ฐ ์ํ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค. ๋ค์ ๊ทธ๋ฆผ์ N = 8์ธ ๊ฒฝ์ฐ์ ์์์ ๋๋ค.
์ํ์ผ๋ก ์ฐ๊ฒฐ๋ ์คํฐ์ปค์์ ๋ช ์ฅ์ ์คํฐ์ปค๋ฅผ ๋ฏ์ด๋ด์ด ๋ฏ์ด๋ธ ์คํฐ์ปค์ ์ ํ ์ซ์์ ํฉ์ด ์ต๋๊ฐ ๋๋๋ก ํ๊ณ ์ถ์ต๋๋ค. ๋จ ์คํฐ์ปค ํ ์ฅ์ ๋ฏ์ด๋ด๋ฉด ์์ชฝ์ผ๋ก ์ธ์ ํด์๋ ์คํฐ์ปค๋ ์ฐข์ด์ ธ์ ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด ์ ๊ทธ๋ฆผ์์ 14๊ฐ ์ ํ ์คํฐ์ปค๋ฅผ ๋ฏ์ผ๋ฉด ์ธ์ ํด์๋ 10, 6์ด ์ ํ ์คํฐ์ปค๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์คํฐ์ปค์ ์ ํ ์ซ์๊ฐ ๋ฐฐ์ด ํํ๋ก ์ฃผ์ด์ง ๋, ์คํฐ์ปค๋ฅผ ๋ฏ์ด๋ด์ด ์ป์ ์ ์๋ ์ซ์์ ํฉ์ ์ต๋๊ฐ์ return ํ๋ solution ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์. ์ํ์ ์คํฐ์ปค ๋ชจ์์ ์ํด ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์์์ ๋ง์ง๋ง ์์๊ฐ ์๋ก ์ฐ๊ฒฐ๋์ด ์๋ค๊ณ ๊ฐ์ฃผํฉ๋๋ค.
โ์ ํ ์ฌํญ
sticker๋ ์ํ์ผ๋ก ์ฐ๊ฒฐ๋ ์คํฐ์ปค์ ๊ฐ ์นธ์ ์ ํ ์ซ์๊ฐ ์์๋๋ก ๋ค์ด์๋ ๋ฐฐ์ด๋ก, ๊ธธ์ด(N)๋ 1 ์ด์ 100,000 ์ดํ์
๋๋ค.
sticker์ ๊ฐ ์์๋ ์คํฐ์ปค์ ๊ฐ ์นธ์ ์ ํ ์ซ์์ด๋ฉฐ, ๊ฐ ์นธ์ ์ ํ ์ซ์๋ 1 ์ด์ 100 ์ดํ์ ์์ฐ์์
๋๋ค.์ํ์ ์คํฐ์ปค ๋ชจ์์ ์ํด sticker ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์์์ ๋ง์ง๋ง ์์๊ฐ ์๋ก ์ฐ๊ฒฐ๋์ด์๋ค๊ณ ๊ฐ์ฃผํฉ๋๋ค.
๐ท๏ธ์ ์ถ๋ ฅ ์
sticker | answer |
[14, 6, 5, 11, 3, 9, 2, 10] | 36 |
[1, 3, 2, 5, 4] | 8 |
์
์ถ๋ ฅ ์ ์ค๋ช
์
์ถ๋ ฅ ์ #1
6, 11, 9, 10์ด ์ ํ ์คํฐ์ปค๋ฅผ ๋ผ์ด ๋์ ๋ 36์ผ๋ก ์ต๋๊ฐ ๋ฉ๋๋ค.
์
์ถ๋ ฅ ์ #2
3, 5๊ฐ ์ ํ ์คํฐ์ปค๋ฅผ ๋ผ์ด ๋์ ๋ 8๋ก ์ต๋๊ฐ ๋ฉ๋๋ค.
๐ช ํ์ด๋ฒ
๋จผ์ ๋ฌธ์ ๋ฅผ ์ฝ๊ณ ์ด๋ป๊ฒ ํ์ด๋ด์ผํ ์ง ์๊ฐํด ๋ณด์๋ค.
๋ฌธ์ ๋ ์ ํํ๊ณ ์ํ๊ณ ์ ๊ฒฝ์ฐ๋ฅผ ๋ฐ์ ธ์ ํธ๋ ์ฌ๊ท๋ก ํ๊ฑฐ๋ DP ๋ก ํ ์ ์๋ค๊ณ ์๊ฐํ๋ค.
๊ทธ๋ฆฌ๊ณ N ์ ๋ณด์์ ๋ 100,000 ์ด๋ ์ฌ๊ท๋ก๋ ์ ๋ ๋ชปํ๊ณ ์ด์ค for๋ฌธ์ ์ฐ๋ O(N^2) ๋ ๋ถ๊ฐํ๊ณ DP๋ก ํ์ด์ผ ๊ฒ ๋ค๊ณ ์๊ฐํ๋ค.
์ฒจ์ ๋ง์ฐํ๊ฒ ํ์ ์ธ๋ฑ์ค๋ฅผ ์ ๋ถ๊ณ ๋ฅด๊ฑฐ๋, ์ง์ ์ธ๋ฑ์ค๋ฅผ ์ ๋ถ ๊ณจ๋ผ ์ด ๋๊ฐ์ง ๊ฒฝ์ฐ์ ์์ค ํฉ์ด ํฐ๊ฑธ ๊ณจ๋ผ๋ ๋๋? ์๊ฐํ๊ธฐ ์ฝ์ง๋ง
[ 1, 22, 1, 1, 33, 1, 1, 1] ๊ฐ์ด ํฐ์๊ฐ ํ์ ์ธ๋ฑ์ค์๋ ํ๋ ์ง์ ์ธ๋ฑ์ค์๋ ํ๊ฐ ์ฉ ์๋ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ์ ์ ๋ ๊ฒ ๋จ์ ํ๊ฒ ํ๋ฉด ์๋๋ค.
์ธ๋ฑ์ค๋ฅผ ๊ณ ๋ฅด๊ณ ์ ๊ณจ๋์ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํ๋ฉด์ DP๋ก ํ์ด์ผ ํ๋๋ฐ, ๋ฌธ์ ์ ์คํฐ์ปค๊ฐ ์ํ์ด๊ธฐ ๋๋ฌธ์ 0๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ์ดํ ๋ ๋งจ ๋ง์ง๋ง ์ธ๋ฑ์ค ๊น์ง ์ดํด๋ด์ผํ๋ค๋ ์๊ฐ์ด ๋ค์๊ณ , ๊ทธ๋ผ ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ 3 ์ด์ ํ์ํ๊ฒ ๊ตฌ๋ ์๊ฐํ๋ค.
ํ์ง๋ง N์ 1์ด์ ๋ถํฐ ์์์ด๊ธฐ ๋๋ฌธ์ N์ด 1 ์ผ๋์ 2์ผ๋ ์ฒ๋ฆฌ๋ฅผ ํด์ค์ผํ๋ค. ์๊ทธ๋ฌ๋ฉด ๋ง์ง๋ง ํ ์ผ์์ ๋ฐํ์์๋ฌ๊ฐ ์๊ธธ ๊ฒ์ด๋ค.
์ฒ์์ ์ ๊ทผ์ 0๋ฒ์งธ ์ธ๋ฑ์ค์ ๋งจ ๋ง์ง๋ง ์ธ๋ฑ์ค๋ฅผ ๊ณ ๋ฅด๋ ์ผ์ด์ค ๋๊ฐ์ง๋ก ์์ํ๋ ค๊ณ ํ์ง๋ง, ๋๋ฌด ๋ณต์กํ ๊ฒ ๊ฐ์. 0๋ฒ ์งธ์ 1๋ฒ์งธ๋ก ๊ฒฝ์ฐ์ ์๋ฅผ ๋๋์๋ค.
[1, 2, 3, 4, 5, 6, 7, 8] ๋ผ๋ ์คํฐ์ปค๊ฐ ์๋๊ฒฝ์ฐ๋ผ๋ฉด
์คํฐ์ปค 1์ ๋ผ๋ฉด์ ์์ํ๋ ๊ฒฝ์ฐ (0๋ฒ ์งธ ์ธ๋ฑ์ค)
[1, 2, 3, 4, 5, 6, 7] ๋ง ๊ฐ์ง๊ณ dp๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. ( 0๋ฒ์งธ๋ฅผ ๊ณ ๋ฆ์ผ๋ก์ ๋งจ๋ง์ง๋ง ์ธ๋ฑ์ค์ ์๋ฅผ ๋ชป ๊ณ ๋ฅด๊ธฐ ๋๋ฌธ)
์คํฐ์ปค 2๋ฅผ ๋ผ๋ฉด์ ์์ํ๋ ๊ฒฝ์ฐ (1๋ฒ์งธ ์ธ๋ฑ์ค)
[2, 3, 4, 5, 6, 7, 8] ๋ง ๊ฐ์ง๊ณ dp๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
๋ ๊ฐ์ง ์ผ์ด์ค๋ก DP ๋ฌธ์ ํ์ด๋ฅผ ํ๊ณ ๋๊ฐ์ง DP์ ๋งจ ๋ง์ง๋ง ๊ฐ์ค ๋ ํฐ ๊ฐ์ด ์ ๋ต์ด ๋๊ฒ ๋๋ค.
1 - DP ํ์ด๋ก ๋ฌธ์ ์ ๊ทผ
2 - ์ฃผ์ด์ง ์คํฐ์ปค ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ 1์ผ๋, 2์ผ๋ ์์ธ์ฒ๋ฆฌ
3 - 0๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ๊ณ ๋ฅผ ๊ฒฝ์ฐ, 1๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ๊ณ ๋ฅผ ๊ฒฝ์ฐ ๋๊ฐ์ง๋ก DP ์ฒ๋ฆฌ
์์ 3๊ฐ์ง ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด ๋ด๋ฉด ํ ์ ์๋ ๋ฌธ์ ๋ค.
๐ฏ ์ ๋ต ์ฝ๋
1) ํ์ฌ ์์น๋ฅผ ๋ฝ๋ ๊ฒฝ์ฐ, dp[i - 2] + sticker[i]
2) ํ์ฌ ์์น๋ฅผ ๋ฝ์ง ์๋ ๊ฒฝ์ฐ, dp[i - 1]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
class Solution {
public int solution(int sticker[]) {
int size = sticker.length;
if (size == 1) return sticker[0];
else if (size == 2) return Math.max(sticker[0], sticker[1]);
//0๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ๊ณ ๋ฅด๋ฉด์ ์์ํ ๊ฒฝ์ฐ
int[] dp1 = new int[size - 1];
dp1[0] = sticker[0];
dp1[1] = sticker[0];
for (int i = 2; i < sticker.length - 1; i++) {
dp1[i] = Math.max(dp1[i - 1], dp1[i - 2] + sticker[i]);
}
//1๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ๊ณ ๋ฅด๋ฉด์ ์์ํ
int[] dp2 = new int[size];
dp2[0] = 0;
dp2[1] = sticker[1];
for (int i = 2; i < size; i++) {
dp2[i] = Math.max(dp2[i - 1], dp2[i - 2] + sticker[i]);
}
return Math.max(dp1[dp1.length - 1], dp2[dp2.length - 1]);
}
}
|
cs |
๋๊ธ