์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 | 28 | 29 | 30 |
- ์๋ฐComparator
- ๊ฐ์ฒด์งํฅ์ถ์ํ
- ํํ๋ก์ ํธ
- ์ฐ์ ์์ํ์๋ฐ
- node์์กด์ฑ์ฃผ์
- ์๋ฐ์คํฌ๋ฆฝํธforeach
- ์๋ฐstream
- webrtc
- ํ๋ก์ ํธํ๊ณ
- ์๋ฐforeach
- ์๋ฐreduce
- ์๋ฐ์คํฌ๋ฆฝํธmap
- ๋ชจ๋๋ฆฌํฑ ์ํคํ ์ฒ
- ํ๋ก๊ทธ๋๋จธ์ค๋๋์ง
- ๊ฐ์ฒด์งํฅsolid
- openvidu
- ์คํ๋งํต์ฌ์์
- Programmers๋๋์ง
- ์๋ฐ๋ฐฐ์ด์ ๋ ฌ
- ํ๋ก๊ทธ๋๋จธ์ค๊ฐ์ฅํฐ์
- ์๋ฐ ๊ฐ๋น์ง์ปฌ๋ ์
- ์๋ฐ์คํฌ๋ฆฝํธreduce
- ๊ฐ์ฒด์งํฅ๋คํ์ฑ
- ์๋ฐ๋ฆฌ์คํธ์ ๋ ฌ
- ํด๋ผ์ฐ๋ํ์
- ์๋ฐfilter
- ์๋ฐ์คํฌ๋ฆฝํธfilter
- ์๋ฐComparable
- Programmers๊ฐ์ฅํฐ์
- ๋๋์ง์๋ฐ
- Today
- Total
I'm pine thank you and you?
ํ๋ก๊ทธ๋๋จธ์ค ๋๋์ง (Java) ๋ณธ๋ฌธ
๐ ๋ฌธ์
๐ค ๋ฌธ์ ๋ถ์
์ง์ด ์ํ์ผ๋ก ๋ฐฐ์น๋์ด ์๊ธฐ ๋๋ฌธ์ ์ฒซ ๋ฒ์งธ ์ง ์์น๋ฅผ ์ ์ํ ์ ์๋ค.
๊ทธ๋ฌ๋ฏ๋ก money ๋ฐฐ์ด์ ์ฒซ๋ฒ์งธ ๊ฐ์ด ์ฒซ ๋ฒ์งธ ์ง์ด๋ผ๊ณ ๋๊ณ ๋ ๊ฐ์ง ์ํฉ์ผ๋ก ๋ถ๋ฅํ ์ ์๋ค.
a. ์ฒซ๋ฒ์งธ ์ง์ ํฐ๋ ๊ฒฝ์ฐ
b. ์ฒซ๋ฒ์งธ ์ง์ ํธ์ง ์๋ ๊ฒฝ์ฐ
์ด ๋ ๊ฒฝ์ฐ๋ก ๋ถ๋ฅํ์ฌ Dynamic Programming์ ํด๋ณด์.
๐ ํ์ด
1. ํ ์ด๋ธ ์ ์
n๋ฒ์งธ ์ง์ ํธ์์ ๋ ์ด ํ์น ๋์ ์ต๋๊ฐ์ด ๋ค์ด๊ฐ ๋ฐฐ์ด ์ ์
int[] dp_first = new int[len]; // ์ฒซ๋ฒ์งธ ์ง์ ํฐ๋ ๊ฒฝ์ฐ
int[] dp_second = new int[len]; // ์ฒซ๋ฒ์งธ ์ง์ ํธ์ง ์๋ ๊ฒฝ์ฐ
2. ์ด๊ธฐ๊ฐ ์ธํ
๊ฐ ์ง์ ์๋ ๋์ ๋ฃ์ด์ค๋ค.
for (int i = 0; i < len; i++) {
dp_first[i] = money[i];
dp_second[i] = money[i];
}
a. ์ฒซ๋ฒ์งธ ์ง์ ํฐ๋ ๊ฒฝ์ฐ
์ฒซ๋ฒ์งธ ์ง์ ํฐ๋๊น ๋๋ฒ์งธ ์ง์ ๋ชป ํด๋ค.
์ง์ ๊ฐ์๋ ์ต์ 3๊ฐ ์ด๋ฏ๋ก, dp_first[2]์ ์ด๊ธฐ๊ฐ๋ ๋ฃ์ด์ค๋ค.
dp_first[1] = -1;
dp_first[2] += dp_first[0];
b. ์ฒซ๋ฒ์งธ ์ง์ ํธ์ง ์๋ ๊ฒฝ์ฐ
์ฒซ๋ฒ์งธ ์ง ์ ํธ๊ณ , ๋๋ฒ์งธ์ง๋ถํฐ ํธ๊ธฐ
dp_second[0] = -1;
3. ์ ํ์ ์ ์ธ
์ธ์ ํ์ง ์์ ๋ ์ง(i - 2, i - 3๋ฒ์งธ ์ง)์ ๋น๊ตํด ๋ ํฐ ๊ฐ์ ๋์ ํด ๋ํ๋ค.
for (int i = 3; i < len; i++) {
dp_first[i] += Math.max(dp_first[i - 3], dp_first[i - 2]);
dp_second[i] += Math.max(dp_second[i - 3], dp_second[i - 2]);
}
4. ๊ฒฐ๊ณผ๊ฐ ๋์ถ
ํ์น๋์ ์ต๋๊ฐ์ ๊ตฌํ๋ ๊ฒ์ด๋ฏ๋ก,
๋งจ ๋ง์ง๋ง ๋์ง์ ๋น๊ตํด dp_first ๋ฐฐ์ด๊ณผ dp_second ๋ฐฐ์ด์์ ์ต๋๊ฐ์ ๊ตฌํ๊ณ
๊ทธ ๋์ค์์ ์ต๋๊ฐ์ด answer!
์ฌ๊ธฐ์, dp_first๋ ์ฒซ๋ฒ์งธ ์ง์ ํธ์์ผ๋๊น ๋งจ ๋ง์ง๋ง ์ง์ ๋ชป ํด๋ค๋ ์ ์ ๊ณ ๋ คํ์.
int first_max = Math.max(dp_first[len - 2], dp_first[len - 3]);
int second_max = Math.max(dp_second[len - 1], dp_second[len - 2]);
answer = Math.max(first_max, second_max);
๐ ํ๊ณ
Dynamic Programming ์ ๊ทผ ๋ฐฉ๋ฒ
1. ํ ์ด๋ธ ์ ์
2. ์ด๊ธฐ๊ฐ ์ธํ
3. ์ ํ์ ์ ์ธ
์ด ์์ ๊ธฐ์ต!
public class ๋๋์ง {
public static void main(String[] args) {
System.out.println(solution(new int[] {1, 2, 3, 1}));
}
private static int solution(int[] money) {
int answer = 0;
int len = money.length;
// 1. n๋ฒ์งธ ์ง์ ํธ์์๋ ํ์น ๋์ ์ต๋๊ฐ์ด ๋ค์ด๊ฐ ๋ฐฐ์ด ์ ์ธ
int[] dp_first = new int[len]; // ์ฒซ๋ฒ์งธ ์ง์ ํฐ๋ ๊ฒฝ์ฐ
int[] dp_second = new int[len]; // ์ฒซ๋ฒ์งธ ์ง์ ์ ํฐ๋ ๊ฒฝ์ฐ
// 2. ๋ฐฐ์ด ์ด๊ธฐ๊ฐ
for (int i = 0; i < len; i++) {
dp_first[i] = money[i];
dp_second[i] = money[i];
}
dp_first[1] = -1; // ๋๋ฒ์งธ์ง ์ํธ๊ธฐ
dp_second[0] = -1; // ์ฒซ๋ฒ์งธ์ง ์ํธ๊ธฐ
dp_first[2] += dp_first[0]; // ์ง์ ๊ฐ์๋ ์ต์ 3๊ฐ์ด๋ฏ๋ก, dp_first[2]์ ์ด๊ธฐ๊ฐ๋ ๋ฃ์ด์ค๋ค.
// 3. ์ ํ์
for (int i = 3; i < len; i++) {
// ์ธ์ ํ์ง ์์ ์ง(i - 2, i - 3)๊ณผ ๋น๊ตํด ๋ ํฐ ๊ฐ์ ๋์ ํด ๋ํด์ค
dp_first[i] += Math.max(dp_first[i - 3], dp_first[i - 2]);
dp_second[i] += Math.max(dp_second[i - 3], dp_second[i - 2]);
}
// ๋งจ ๋ง์ง๋ง ๋์ง์ ๋น๊ตํ์ฌ ์ต๋๊ฐ ์ฐพ๊ธฐ
int first_max = Math.max(dp_first[len - 2], dp_first[len - 3]); // ์ฒซ๋ฒ์งธ ์ง์ ํธ์์ผ๋๊น ๋งจ ๋ง์ง๋ง ์ง์ ์ด์ฐจํผ ๋ชป ํด๋ค.
int second_max = Math.max(dp_second[len - 1], dp_second[len - 2]); // ์ฒซ๋ฒ์งธ ์ง์ ์ ํธ์์ผ๋๊น ๋งจ ๋ง์ง๋ง ์ง ํธ ์ ์๋ค.
answer = Math.max(first_max, second_max);
return answer;
}
}
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค ์ด์ค์ฐ์ ์์ํ (Java, PriorityQueue) (1) | 2023.06.27 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค ๊ฐ์ฅ ํฐ ์ (Java) (0) | 2023.03.20 |
ํต์ ๋ ฌ(Quick Sort) ์ฝ๊ฒ ์๊ธฐ (Java) (0) | 2022.12.13 |