πŸ•οΈ ICPC Sinchon/Dynamic Programming

[BOJ][C++] λ°±μ€€ 2491번: μˆ˜μ—΄

선달 2023. 4. 17. 23:16
λ°˜μ‘ν˜•

https://www.acmicpc.net/problem/2491

 

2491번: μˆ˜μ—΄

0μ—μ„œλΆ€ν„° 9κΉŒμ§€μ˜ 숫자둜 이루어진 N개의 μˆ«μžκ°€ λ‚˜μ—΄λœ μˆ˜μ—΄μ΄ μžˆλ‹€. κ·Έ μˆ˜μ—΄ μ•ˆμ—μ„œ μ—°μ†ν•΄μ„œ μ»€μ§€κ±°λ‚˜(같은 것 포함), ν˜Ήμ€ μ—°μ†ν•΄μ„œ μž‘μ•„μ§€λŠ”(같은 것 포함) μˆ˜μ—΄ 쀑 κ°€μž₯ 길이가 κΈ΄ 것을 μ°Ύ

www.acmicpc.net

 

문제

0μ—μ„œλΆ€ν„° 9κΉŒμ§€μ˜ 숫자둜 이루어진 N개의 μˆ«μžκ°€ λ‚˜μ—΄λœ μˆ˜μ—΄μ΄ μžˆλ‹€. κ·Έ μˆ˜μ—΄ μ•ˆμ—μ„œ μ—°μ†ν•΄μ„œ μ»€μ§€κ±°λ‚˜(같은 것 포함), ν˜Ήμ€ μ—°μ†ν•΄μ„œ μž‘μ•„μ§€λŠ”(같은 것 포함) μˆ˜μ—΄ 쀑 κ°€μž₯ 길이가 κΈ΄ 것을 μ°Ύμ•„λ‚΄μ–΄ κ·Έ 길이λ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜λΌ. 

예λ₯Ό λ“€μ–΄ μˆ˜μ—΄ 1, 2, 2, 4, 4, 5, 7, 7, 2 μ˜ κ²½μš°μ—λŠ” 1 ≤ 2 ≤ 2 ≤ 4 ≤ 4 ≤ 5 ≤ 7 ≤ 7 이 κ°€μž₯ κΈ΄ ꡬ간이 λ˜λ―€λ‘œ κ·Έ 길이 8을 좜λ ₯ν•œλ‹€. μˆ˜μ—΄ 4, 1, 3, 3, 2, 2, 9, 2, 3 의 κ²½μš°μ—λŠ” 3 ≥ 3 ≥ 2 ≥ 2 κ°€ κ°€μž₯ κΈ΄ ꡬ간이 λ˜λ―€λ‘œ κ·Έ 길이 4λ₯Ό 좜λ ₯ν•œλ‹€. 또 1, 5, 3, 6, 4, 7, 1, 3, 2, 9, 5 의 κ²½μš°μ—λŠ” μ—°μ†ν•΄μ„œ μ»€μ§€κ±°λ‚˜ μž‘μ•„μ§€λŠ” μˆ˜μ—΄μ˜ 길이가 3 이상인 κ²½μš°κ°€ μ—†μœΌλ―€λ‘œ 2λ₯Ό 좜λ ₯ν•˜μ—¬μ•Ό ν•œλ‹€.

μž…λ ₯

첫째 μ€„μ—λŠ” μˆ˜μ—΄μ˜ 길이 N이 주어지고, λ‘˜μ§Έ μ€„μ—λŠ” N개의 μˆ«μžκ°€ λΉˆμΉΈμ„ 사이에 두고 주어진닀. N은 1 이상 100,000 μ΄ν•˜μ˜ μ •μˆ˜μ΄λ‹€.

좜λ ₯

첫째 쀄에 κ°€μž₯ κΈ΄ 길이λ₯Ό 좜λ ₯ν•œλ‹€.

 

풀이

λ™μ κ³„νšλ²•μ„ μ΄μš©ν•œλ‹€.

dp1[i] : i번째 μˆ«μžκΉŒμ§€ μ—°μ†μ μœΌλ‘œ κ°™κ±°λ‚˜ μ¦κ°€ν•˜λŠ” 갯수

dp2[i] : i번째 μˆ«μžκΉŒμ§€ μ—°μ†μ μœΌλ‘œ κ°™κ±°λ‚˜ κ°μ†Œν•˜λŠ” 갯수

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    // μž…λ ₯
    int n;
    cin >> n;
    vector<int> v(n);
    for(int i=0; i<n; i++)
        cin >> v[i];
    
    // λ™μ κ³„νšλ²•
    vector<int> dp1(n);
    vector<int> dp2(n);
    dp1[0] = dp2[0] = 1;
    for(int i=1; i<n; i++) {
        if(v[i-1] <= v[i]) dp1[i] = dp1[i-1]+1;
        else dp1[i] = 1;
        
        if(v[i-1] >= v[i]) dp2[i] = dp2[i-1]+1;
        else dp2[i] = 1;
        
    }
    
    //  좜λ ₯
    cout << max(*max_element(dp1.begin(), dp1.end()), *max_element(dp2.begin(), dp2.end()));
    
    return 0;
}
λ°˜μ‘ν˜•