[백준] 1365 꼬인 전깃줄

2023. 8. 9. 16:41

잘라내는 전선을 최소로 하여 꼬여 있는 전선이 하나도 없게 만들려고 한다. → 전선을 잘라내는데 모두 동일한 비용이 든다. 그리고 전선이 꼬여있지 않으려면 왼쪽 전봇대를 커지는 차례로, 연결된 오른쪽 전봇대의 숫자를 확인했을 때 앞서 나온 전봇대 숫자보다 커야 꼬여있지 않은 상태가 된다. 즉, 연결된 오른쪽 전봇대 숫자를 수열로 보고 이 수열에서 가장 길이가 긴 증가하는 부분수열을 구했을 때 가장 적은 비용으로 전봇대의 전선을 자르는 꼴이 된다.

가장 길이가 긴 증가하는 부분수열의 길이를 구하기 → 부분수열에 있는 원소를 구하는 것이 아닌 길이만 구하면 되는 문제이다.

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int N, x;
vector<int> arr;

int main()
{
    cin >> N;
    for (int i = 0; i < N; ++i) {
        cin >> x;
        if (arr.empty() || arr.back() < x) {
            arr.push_back(x);
        }
        else {
            arr[lower_bound(arr.begin(), arr.end(), x)-arr.begin()] = x;
        }
    }
    cout << N - arr.size();
    return 0;
}

'* 언어 | 알고리즘 > 알고리즘 문제풀이' 카테고리의 다른 글

[백준] 5012 불만 정렬  (0) 2023.08.13
[백준] 3006 터보소트  (0) 2023.08.12
[백준] 14285 간선 끊어가기  (0) 2023.08.11
[백준] 14574 헤븐스 키친  (0) 2023.08.10
[백준] 5419 북서풍  (0) 2023.08.07

BELATED ARTICLES

more