λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Algorithm/BOJ

[BOJ] κ°€μž₯ κΈ΄ 바이토닉 λΆ€λΆ„ μˆ˜μ—΄(11054)

[λ°±μ€€(BOJ)] κ°€μž₯ κΈ΄ 바이토닉 λΆ€λΆ„ μˆ˜μ—΄(11054) C++

문제 : BOJ_11054번 κ°€μž₯ κΈ΄ 바이토닉 λΆ€λΆ„ μˆ˜μ—΄

문제 μ„€λͺ…

DP

기쑴의 μ¦κ°€ν•˜λŠ” μˆ˜μ—΄, κ°μ†Œν•˜λŠ” μˆ˜μ—΄μ΄ 합쳐진 λ¬Έμ œμž…λ‹ˆλ‹€.

μˆ˜μ—΄μ΄ μ¦κ°€ν•˜λ‹€κ°€ κ°μ†Œκ°€ λ˜λŠ” 경우, μˆ˜μ—΄μ΄ 계속 μ¦κ°€ν•˜λŠ” 경우, μˆ˜μ—΄μ΄ 계속 κ°μ†Œν•˜λŠ” κ²½μš°κ°€ λͺ¨λ‘ 바이 토닉 λΆ€λΆ„ μˆ˜μ—΄μž…λ‹ˆλ‹€.

μˆ˜μ—΄μ΄ κ°μ†Œν•˜λ‹€κ°€ μ¦κ°€ν•˜λŠ” κ²½μš°λŠ” ν•΄λ‹Ήλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

DPλ₯Ό ν™œμš©ν•΄ ν•΄κ²°ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.


Solution

μ•žμ„œ μ–ΈκΈ‰ν•œ μ„Έ 가지 경우둜 λ‚˜λˆ„μ–΄μ„œ DP 배열에 κ°±μ‹ ν•΄ μ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€.

  • μˆ˜μ—΄μ΄ 계속 μ¦κ°€ν•˜λŠ” 경우 -> dp[0][ν˜„μž¬ 인덱슀]
  • μˆ˜μ—΄μ΄ μ¦κ°€ν•˜λ‹€κ°€ κ°μ†Œκ°€ λ˜λŠ” 경우 -> dp[1][ν˜„μž¬ 인덱슀]
  • μˆ˜μ—΄μ΄ 계속 κ°μ†Œν•˜λŠ” 경우 -> dp[2][ν˜„μž¬ 인덱슀]

둜 λ§Œλ“€μ–΄ 값을 계속 비ꡐ해 μ•„ν•©λ‹ˆλ‹€.

μ΄λ•Œ, 계속 μ¦κ°€ν•˜κ±°λ‚˜ κ°μ†Œν•˜λŠ” 값은 max(ν˜„μž¬ 인덱슀의 dp κ°’, μ¦κ°€ν•˜κ±°λ‚˜ κ°μ†Œν•˜λŠ” λΆ€λΆ„μ˜ dp κ°’ + 1)둜 계속 갱신을 ν•΄μ£Όλ©΄ λ©λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ μ¦κ°€ν•˜λ‹€κ°€ κ°μ†Œλ‘œ λ°”λ€ŒλŠ” μˆ˜μ—΄μ˜ 경우,

  • ν˜„μž¬ μΈλ±μŠ€μ—μ„œ 계속 μ¦κ°€ν–ˆμ„ λ•Œμ˜ 경우의 수
  • ν˜„μž¬ μΈλ±μŠ€κ°€ μ¦κ°€ν•˜λ‹€κ°€ κ°μ†Œλ‘œ λ³€ν–ˆλ‹€κ³  ν–ˆμ„ λ•Œμ˜ DP 크기λ₯Ό 수λ₯Ό λΉ„κ΅ν•˜λ©° κ°±μ‹ ν•΄ μ€˜μ•Ό ν•©λ‹ˆλ‹€.

#include <iostream>
#include <algorithm>
using namespace std;
int n, result;
int dp[3][1001];
int val[1001];
int main(void){
    cin >> n;
    for(int i=1;i<=n;i++){
        cin >> val[i];
        dp[0][i]=1;
        dp[1][i]=1;
        dp[2][i]=1;
    }
    for(int i=1; i<=n;i++){
        for(int j=1; j<i;j++){
            if(val[j]<val[i]){
                dp[0][i]= max(dp[0][i], dp[0][j]+1 );
            }
            if(val[j]>val[i]){
                dp[2][i] = max(dp[2][i],dp[2][j]+1);
                dp[1][i] = max(dp[1][i],dp[0][j]+1);
                dp[1][i] = max(dp[1][i],dp[1][j]+1);
            }
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1; j<3;j++){
            result = max(result,dp[j][i]);
        }
    }
    cout << result << '\n';
    return 0;
}

'Algorithm > BOJ' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[BOJ] 사이클 κ²Œμž„(20040)  (0) 2022.03.14
[BOJ] ν•˜λ…Έμ΄ 탑 이동 μˆœμ„œ(11729)  (0) 2022.03.13
[BOJ] Thread Knots(17976)  (0) 2022.03.13
[BOJ] LCS(9251)  (0) 2022.03.12
[BOJ] 계단 였λ₯΄κΈ°(2579)  (0) 2022.03.12