๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ”ฅ PS(Problem Solving) ๐Ÿ”ฅ/BOJ

[BOJ] #11053 ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„์ˆ˜์—ด

by dar0m! 2019. 12. 16.
์‹œ๊ฐ„ ์ œํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ ์ •๋‹ต ๋น„์œจ
1 ์ดˆ 256 MB 37.230%

 

 

11053๋ฒˆ: ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด

์ˆ˜์—ด A๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ˆ˜์—ด A = {10, 20, 10, 30, 20, 50} ์ธ ๊ฒฝ์šฐ์— ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์€ A = {10, 20, 10, 30, 20, 50} ์ด๊ณ , ๊ธธ์ด๋Š” 4์ด๋‹ค.

www.acmicpc.net

 

dp[i] ๋Š” 0~i ๋ฒˆ ์งธ๊นŒ์ง€ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„์ˆ˜์—ด์˜ ๊ธธ์ด์ด๋‹ค.

  • 0 ๋ถ€ํ„ฐ n๊นŒ์ง€ ์ˆœํšŒํ•˜๋Š” i-๋ฐ˜๋ณต๋ฌธ๊ณผ, ๊ทธ ์•ˆ์— 0 ๋ถ€ํ„ฐ i ๋ฒˆ์งธ๊นŒ์ง€ ์ˆœํšŒํ•˜๋Š” j-๋ฐ˜๋ณต๋ฌธ ์œผ๋กœ ์ด์ค‘for๋ฌธ์„ ๋งŒ๋“ค์—ˆ๋‹ค.
  • arr[j] < arr[i] ๋ฅผ ๋งŒ์กฑํ•˜๋Š” ๊ฒƒ๋“ค ์ค‘์—์„œ dp[j] ๊ฐ€ ๊ฐ€์žฅ ํฐ ๊ฒƒ์„ ๊ธฐ์–ตํ•ด๋’€๋‹ค๊ฐ€
  • dp[i] ๋ฅผ max(0~i๋ฒˆ์งธ ์ค‘ ๊ฐ€์žฅ ํฐ dp[j]) + 1 ๋กœ ๊ฐฑ์‹ ํ•˜์˜€๋‹ค.

 

๋ฉ”๋ชจ๋ฆฌ ์‹œ๊ฐ„
1120  KB  ms
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<cstdio>
using namespace std;
int n, arr[1005], dp[1005], ans;
int main() {
    scanf("%d"&n);
    for (int i = 0; i < n; i++) {
        scanf("%d"&arr[i]);
    }
    for (int i = 0; i < n; i++) {
        int max = 0;
        for (int j = 0; j < i; j++) {
            if (arr[j] < arr[i]) {
                if (max < dp[j])
                    max = dp[j];
            }
        }
        dp[i] = max + 1;
        ans = dp[i] > ans ? dp[i] : ans;
    }
    printf("%d", ans);
    return 0;
}
cs

๋Œ“๊ธ€