์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- ์๊ณ ๋ฆฌ์ฆ
- SK
- ๊ทธ๋ํ
- skala1๊ธฐ
- ๋ณํฉ์ ๋ ฌ
- DP
- ๋จธ์ง์ํธ
- ์ค๋ธ์
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ๋์ ํฉ
- ์์ํ์
- db
- ํ์ด์ฌ
- ๋ค์ด๋๋ฏนํ๋ก๊ทธ๋๋ฐ
- SQL
- ์ ๋ ฌ
- DFS
- BFS
- ์ํ
- ๋๋น์ฐ์ ํ์
- ๊ทธ๋ฆฌ๋
- ๋์ ๊ณํ๋ฒ
- skala
- ๊น์ด์ฐ์ ํ์
- ๊ตฌํ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ํ๋ก๊ทธ๋๋จธ์ค
- ๊ทธ๋ํํ์
- LIS
- ๋ฐฑ์ค
- Today
- Total
๐๐ญ๐ฐ๐ธ ๐ฃ๐ถ๐ต ๐ด๐ต๐ฆ๐ข๐ฅ๐บ
[๋ฐฑ์ค] 11053๋ฒ: ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด - C++ ๋ณธ๋ฌธ
[๋ฐฑ์ค] 11053๋ฒ: ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด - C++
.23 2021. 7. 24. 01:32๋ฌธ์
์์ด A๊ฐ ์ฃผ์ด์ก์ ๋, ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์๋ฅผ ๋ค์ด, ์์ด A = {10, 20, 10, 30, 20, 50} ์ธ ๊ฒฝ์ฐ์ ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ A = {10, 20, 10, 30, 20, 50} ์ด๊ณ , ๊ธธ์ด๋ 4์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์์ด A์ ํฌ๊ธฐ N (1 ≤ N ≤ 1,000)์ด ์ฃผ์ด์ง๋ค.
๋์งธ ์ค์๋ ์์ด A๋ฅผ ์ด๋ฃจ๊ณ ์๋ Ai๊ฐ ์ฃผ์ด์ง๋ค. (1 ≤ Ai ≤ 1,000)
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์์ด A์ ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ ๊ธธ์ด๋ฅผ ์ถ๋ ฅํ๋ค.
DP๋ฅผ ์ด์ฉํ์ฌ ํ ์ ์๋ ๋ฌธ์ . ์ฌํ๊น์ง ํ์๋ ๋ค๋ฅธ DP๋ฌธ์ ๋ค๊ณผ ์กฐ๊ธ ๋ค๋ฅด๊ฒ ์ ๊ทผํด์ผ๋ผ์ ์ด๋ ค์ ๋ ๋ฌธ์ ๊ฐ๋ค. ๊ฒ์ํด๋ณด๋ ์ด๋ฌํ ๋ฌธ์ ์ ํ์ LIS(Longest Increasing Subsequence)๋ผ๊ณ ํ๋๋ผ
์์ด์ ๋ด์ ๋ฐฐ์ด A์ ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ ๊ธธ์ด๋ฅผ ๊ธฐ๋กํ ๋ฐฐ์ด D๋ฅผ ์ ์ธํ ํ, A์ 1๋ฒ์งธ ์์๋ถํฐ ์ ๊ฒ์ ํ๋ค. ์์ (i)๋ณด๋ค ์ด์ ์ ์๋ ์์๋ค๊ณผ ๋น๊ตํด๊ฐ๋ฉฐ ์์ ๊ฐ์ด ์กด์ฌํ ๊ฒฝ์ฐ D์ ์๋ ๊ฐ์ ๋น๊ตํด๊ฐ๋ฉฐ ๊ฐ์ฅ ํฐ ๊ฐ(์ต๋ ๊ธธ์ด)์ D[i]์ ๋์ ํ๋ค. ์ด๋ฅผ ์์๋๋ก ์ ๋ฆฌํ์๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
1. A ๋ฐฐ์ด ๋ด์์ A[i]๋ณด๋ค ์์ ๊ฐ์ ์ฐพ๋๋ค. (1 ≤ i ≤ N, 1 ≤ j < i)
2. A[i]๋ณด๋ค ์์ ๊ฐ์ธ ์์์ ์์น๋ฅผ j๋ผ๊ณ ํ ๋, ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํ์ฌ D[i]๋ฅผ ๊ตฌํ๋ค.
2-1. D[i] ≤ D[j], A[i]๊น์ง์ ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ ๊ธธ์ด๋ A[j]๊น์ง์ ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ ๊ธธ์ด D[j]์ A[i]๋ฅผ ํฌํจํ์ฌ 1์ ๋ํ ๊ฐ์ด๋ฏ๋ก D[i] = D[j] + 1
2-2. D[i] > D[j], A[i]๊น์ง์ ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ ๊ธธ์ด๋ ์ฌ์ ํ D[i] = D[i]
3. D[i]๊น์ง์ ๊ฐ ์ค ๊ฐ์ฅ ํฐ ๊ฐ(์ต๋ ๊ธธ์ด)์ length์ ์ ์ฅ.
์ฌ๋ด์ผ๋ก ๊ฐ ๋น๊ต ๋ถ๋ถ์์ (memo[i] > memo[j] ? memo[i] : memo[j] + 1) ๋ฅผ (memo[i] > memo[j] ? memo[i] : memo[i] + 1)๋ก ์ผ๋๋ฐ ๋ต์ด ํต๊ณผ๋์๋ค. ..์๊ทธ๋ฐ์ง ์ ๋ชจ๋ฅด๊ฒ ๋ค.
์ฝ๋
#include <cstdio>
#define MAX 1001
int DP(int num);
int main(void) {
int n;
scanf("%d", &n);
printf("%d\n", DP(n));
return 0;
}
int DP(int num) {
int A[MAX] = { 0 };
int memo[MAX] = { 0 };
int length = 0;
for(int i = 1; i <= num; i++) {
scanf("%d", &A[i]);
}
for(int i = 1; i <= num; i++) {
memo[i] = 1;
for(int j = 1; j < i; j++) {
if(A[i] > A[j]) {
memo[i] = (memo[i] > memo[j] ? memo[i] : memo[j] + 1);
}
}
length = (length > memo[i] ? length : memo[i]);
}
return length;
}
'์ฝ๋ฉํ ์คํธ ์ค๋น > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 11722๋ฒ: ๊ฐ์ฅ ๊ธด ๊ฐ์ํ๋ ๋ถ๋ถ ์์ด - C++ (0) | 2021.07.26 |
---|---|
[๋ฐฑ์ค] 11055๋ฒ: ๊ฐ์ฅ ํฐ ์ฆ๊ฐ ๋ถ๋ถ ์์ด - C++ (0) | 2021.07.25 |
[๋ฐฑ์ค] 2193๋ฒ: ์ด์น์ - C++ (0) | 2021.07.23 |
[๋ฐฑ์ค] 11057๋ฒ: ์ค๋ฅด๋ง ์ - C++ (0) | 2021.07.20 |
[๋ฐฑ์ค] 10844๋ฒ: ์ฌ์ด ๊ณ๋จ์ - C++ (0) | 2021.07.19 |