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

2022. 7. 20. 22:44Β·PS/C++
λ°˜μ‘ν˜•

λ°±μ€€
11054번 κ°€μž₯ κΈ΄ 바이토닉 λΆ€λΆ„ μˆ˜μ—΄


πŸ€”λ¬Έμ œ 이해

μ–΄λŠ ν•œ 숫자λ₯Ό κΈ°μ€€μœΌλ‘œ μ™Όμͺ½μ—λŠ” κ°μ†Œν•˜λŠ” μˆ«μžλ“€μ΄, 였λ₯Έμͺ½μ—λŠ” μ¦κ°€ν•˜λŠ” μˆ«μžλ“€μ΄ μ˜€λŠ” λΆ€λΆ„ μˆ˜μ—΄μ„ μ°ΎλŠ” λ¬Έμ œμ΄λ‹€.

μ΄λ•Œ, 같은 μˆ«μžκ°€ μ—°μ†μ μœΌλ‘œ λ‚˜μ˜¬ 수 μ—†λ‹€.


πŸ’‘μ²«λ²ˆμ§Έ 아이디어

κ°€μž₯ κΈ΄ μ¦κ°€ν•˜λŠ” λΆ€λΆ„ μˆ˜μ—΄μ˜ μ‘μš© λ²„μ „μ΄μ—ˆλ‹€. 

 

πŸ”₯풀이πŸ”₯

dp_in[i]λŠ” i번째 수λ₯Ό λ§ˆμ§€λ§‰ 수둜 ν–ˆμ„ λ•Œ μ¦κ°€ν•˜λŠ” 수의 개수λ₯Ό μ˜λ―Έν•˜κ³ ,

dp_de[i]λŠ” i번째 수λ₯Ό 첫번째 수둜 ν–ˆμ„ λ•Œ κ°μ†Œν•˜λŠ” 수의 개수λ₯Ό μ˜λ―Έν•œλ‹€.

 

1. dp_inκ³Ό dp_deλŠ” λͺ¨λ‘ 1둜 μ΄ˆκΈ°ν™”ν•œλ‹€.

2. μ•žμ—μ„œλΆ€ν„° μ°¨λ‘€λŒ€λ‘œ ν˜„μž¬ μˆ«μžκ°€ λ‹€μŒ μˆ«μžλ³΄λ‹€ 크닀면, ν˜„μž¬ dp_inκ³Ό 이전값 dp_in에 1을 λ”ν•œ κ°’ μ€‘μ—μ„œ 더 큰 값을 dp_in의 ν˜„μž¬κ°’μ— λ„£μ–΄μ€€λ‹€.

3. λ’€μ—μ„œλΆ€ν„° μ°¨λ‘€λŒ€λ‘œ ν˜„μž¬ μˆ«μžκ°€ λ‹€μŒ μˆ«μžλ³΄λ‹€ 크닀면, ν˜„μž¬ dp_de와 이전값 dp_de에 1을 λ”ν•œ κ°’ μ€‘μ—μ„œ 더 큰 값을 dp_de의 ν˜„μž¬κ°’μ— λ„£μ–΄μ€€λ‹€.

4. dp_inκ³Ό dp_de의 i번째 μˆ˜λŠ” κ²ΉμΉ˜λ―€λ‘œ dp_inκ³Ό dp_deλ₯Ό λ”ν•˜κ³  1을 λΉΌμ€€ 값듀을 λΉ„κ΅ν•΄μ„œ κ°€μž₯ 큰 값을 좜λ ₯ν•œλ‹€.

 

βŒνŠΈλŸ¬λΈ” μŠˆνŒ…

μœ„ ν’€μ΄μ—μ„œμ˜ 4λ²ˆμ—μ„œ dp_in + dp_deλ₯Ό 해쀄 λ•Œ κ²ΉμΉ˜λŠ” κ°’ 1을 λΉΌμ£Όμ§€ μ•Šμ•„μ„œ ν‹€λ Έμ—ˆλ‹€.


#include <iostream>
#include <cmath>

using namespace std;

int dp_in[1001];
int dp_de[1001];
int arr[1001];
int n;

int main() {
    cin.tie(nullptr);
    cout.tie(nullptr);
    ios::sync_with_stdio(false);

    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> arr[i];
    }

    for (int i = 0; i < n; i++) {
        dp_in[i] = 1;
        dp_de[i] = 1;
    }

    for (int i = 1; i < n; i++) {
        for (int j = 0; j < i; j++) {
            if (arr[j] < arr[i]) {
                dp_in[i] = max(dp_in[i], dp_in[j] + 1);
            }
        }
    }

    for (int i = n - 1; i >= 0; i--) {
        for (int j = n - 1; j >= i; j--) {
            if (arr[j] < arr[i]) {
                dp_de[i] = max(dp_de[i], dp_de[j] + 1);
            }
        }
    }

    int result = dp_in[0] + dp_de[0] - 1;
    for (int i = 1; i < n; i++) {
        int tmp = dp_in[i] + dp_de[i] - 1;
        if (result < tmp) result = tmp;
    }
    cout << result;
}
728x90
λ°˜μ‘ν˜•

'PS > C++' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[λ°±μ€€/C++] 1766번 λ¬Έμ œμ§‘  (0) 2022.07.21
[λ°±μ€€/C++] 13398번 연속합 2  (0) 2022.07.20
[λ°±μ€€/C++] 11053번 κ°€μž₯ κΈ΄ μ¦κ°€ν•˜λŠ” λΆ€λΆ„ μˆ˜μ—΄  (0) 2022.07.20
[λ°±μ€€/C++] 5021번 μ™•μœ„κ³„μŠΉ  (0) 2022.07.18
[λ°±μ€€/C++] 11057번 였λ₯΄λ§‰ 수  (0) 2022.07.18
'PS/C++' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [λ°±μ€€/C++] 1766번 λ¬Έμ œμ§‘
  • [λ°±μ€€/C++] 13398번 연속합 2
  • [λ°±μ€€/C++] 11053번 κ°€μž₯ κΈ΄ μ¦κ°€ν•˜λŠ” λΆ€λΆ„ μˆ˜μ—΄
  • [λ°±μ€€/C++] 5021번 μ™•μœ„κ³„μŠΉ
yulee_to
yulee_to
  • yulee_to
    yulee
    yulee_to
  • 전체
    였늘
    μ–΄μ œ
    • 전체 κΈ€ (113) N
      • CS (2)
        • OS (0)
        • DB (0)
        • Network (2)
      • Develop (21)
        • Spring (9)
        • Java (12)
        • Python (0)
        • Algorithm (0)
        • 기타 (0)
      • PS (39)
        • C++ (39)
        • Java (0)
      • Book (39)
        • μžλ°”μ˜ μ‹  (32)
        • μŠ€ν”„λ§ μž…λ¬Έμ„ μœ„ν•œ μžλ°” 객체 μ§€ν–₯의 원리와 이해 (7)
      • ETC (4)
        • Blog (3)
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • νƒœκ·Έ
    • λ°©λͺ…둝
  • 링크

  • 곡지사항

  • 인기 κΈ€

  • νƒœκ·Έ

    DP
    boj
    μŠ€ν„°λ””
    C++
    GodOfJava
    객체지ν–₯
    TiL
    μœ„μƒμ •λ ¬
    1일1λ°±μ€€
    λ°±μ€€
    μžλ°”μ˜ μ‹ 
    Spring
    EC2
    λ©€ν‹°μΊ νΌμŠ€
    μžλ°”
    μ•Œκ³ λ¦¬μ¦˜
    λ¬Έμ œν’€μ΄
    Java
    μŠ€ν”„λ§ μž…λ¬Έ
    μ—μŠ€λ„·μ‹œμŠ€ν…œ
  • 졜근 λŒ“κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.3
yulee_to
[λ°±μ€€/C++] 11054번 κ°€μž₯ κΈ΄ 바이토닉 λΆ€λΆ„ μˆ˜μ—΄
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”