[ 백준 ] 2565 / 전깃줄

金弘均·2021년 9월 15일
0

Baekjoon Online Judge

목록 보기
78/228
post-thumbnail
post-custom-banner

# Appreciation

/*
 * Problem :: 2565 / 전깃줄
 *
 * Kind :: Dynamic Programming
 *
 * Insight
 * - 처음에는 가장 많이 교차하는 전깃줄을 없애면
 *   답을 구할 수 있을 줄 알았다
 *   + 그런데 가장 많이 교차하는 전깃줄이 2개 이상이라면...?
 *     # https://sonsh0824.tistory.com/entry/2565-%EC%A0%84%EA%B9%83%EC%A4%84
 *       5
 *       1 3
 *       2 1
 *       3 5
 *       4 2
 *       5 4
 *       -> 가장 많이 교차되는 전깃줄을 남기는 것이
 *          가장 적게 전깃줄을 없애는 경우이다!!!
 *
 * - 서로 교차하지 않게 하기 위해 없애야 하는 전깃줄의 최소 개수
 *   = 전체 전깃줄 개수 - 서로 교차하지 않게 전깃줄을 놓는 최대 개수
 *   + 서로 교차하지 않게 전깃줄을 둘 수 있을까?
 *     # 전깃줄을 A 에서 B 로가는 함수 f 로 생각해보자
 *       교차하지 않는다 = f 가 증가함수이다
 *     # A 의 위치를 기준으로 오름차순으로 정렬한 뒤
 *       B 의 위치를 기준으로 LIS(Longest Increasing Subsequence) 를 구하면 되겟다!
 *
 * Point
 * - 없애야 하는 전깃줄의 최소 개수를
 *   놓을 수 있는 전깃줄의 최대 개수로 생각하는 역발상
 *   + 물론 나는 없었다 ㅋㅋ
 */

# Code

//
//  BOJ
//  ver.C++
//
//  Created by GGlifer
//
//  Open Source

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

using namespace std;

#define endl '\n'

// Set up : Global Variables
struct Wire { int a, b; };

// Set up : Functions Declaration
bool operator < (Wire u, Wire v);


int main()
{
    // Set up : I/O
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    // Set up : Input
    int N; cin >> N;
    vector<Wire> W(N);
    for (int i=0; i<N; i++)
        cin >> W[i].a >> W[i].b;

    // Process
    sort(W.begin(), W.end()); /* A 의 위치를 기준으로 오름차순 정렬 */
    vector<int> dp(N, 1); /* B 의 위치를 기준으로 LIS
                              * dp[i] = len(LIS(i+1 번째 전깃줄을 마지막으로하는)) */
    int ans = N-1;
    for (int i=1; i<N; i++) {
        for (int j=0; j<i; j++) {
            if (W[i].b > W[j].b && dp[i] < dp[j]+1) {
                dp[i] = dp[j]+1;
                ans = min(ans, N-dp[i]);
            }
        }
    }

    // Control : Output
    cout << ans << endl;
}

// Helper Functions
bool operator < (Wire u, Wire v)
/* Wire 구조체 정렬을 위한 함수 */
{
    /* A 의 위치를 기준으로 오름차순 정렬 */
    return u.a < v.a;
}
profile
이런 미친 게임을 봤나! - 옥냥이
post-custom-banner

0개의 댓글