반응형

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

 

2565번: 전깃줄

첫째 줄에는 두 전봇대 사이의 전깃줄의 개수가 주어진다. 전깃줄의 개수는 100 이하의 자연수이다. 둘째 줄부터 한 줄에 하나씩 전깃줄이 A전봇대와 연결되는 위치의 번호와 B전봇대와 연결되는

www.acmicpc.net

 

 

[ 문제풀이 ]

 

이 문제를 풀기 전에 다음 글을 먼저 읽고 오시는 것을 추천드립니다.

https://rudalsd.tistory.com/175

 

[ 알고리즘 ] 최장 증가 부분 수열(Longest Increasing Subsequence)

1. 최장 증가 부분 수열(Longest Increasing Subsequence)이란? 어떠한 수열이 주어질 때, 그 수열에서 일부 원소를 뽑아내어 새로 만든 수열을 '부분 수열'이라고 하며, 이 수열이 오름차순을 유지하면 '증

rudalsd.tistory.com

 

1. pair<int, int> arr 배열을 만들어서 입력받은 A전봇대와 B전봇대를 저장합니다.

 

2. A전봇대의 번호를 기준으로 오름차순으로 정렬합니다.

 

3. lower_bound를 이용하여 LIS의 길이를 구하고, N - LIS.size()를 출력합니다.

 

[ 소스코드 ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include<iostream>
#include<vector>
#include<algorithm>
 
using namespace std;
 
int N;
vector<int> LIS;
pair<intint> arr[100];
 
int main()
{
    scanf("%d"&N);
 
    for (int i = 0; i < N; i++) {
        int A, B;
        scanf("%d %d"&A, &B);
        arr[i] = { A,B };
    }
 
    sort(arr, arr + N);
 
    LIS.push_back(arr[0].second);
 
    for (int i = 1; i < N; i++) {
        if (LIS[LIS.size() - 1< arr[i].second) {
            LIS.push_back(arr[i].second);
        }
        else {
            auto it = lower_bound(LIS.begin(), LIS.end(), arr[i].second);
            *it = arr[i].second;
        }
    }
 
    printf("%d", N - (int)LIS.size());
}
cs
반응형
반응형

1. 최장 증가 부분 수열(Longest Increasing Subsequence)이란?

 

어떠한 수열이 주어질 때, 그 수열에서 일부 원소를 뽑아내어 새로 만든 수열을 '부분 수열'이라고 하며, 이 수열이 오름차순을 유지하면 '증가하는 부분 수열'이 되는 것이다. 최장 증가 부분 수열(Longest Increasing Subsequence)이란 '증가하는 부분 수열' 중 가장 긴 수열을 의미합니다.

 

2. 최장 증가 부분 수열(Longest Increasing Subsequence)동작 원리

 

O(NlogN)의 시간복잡도가 걸리는 lower_bound를 활용하여 구할 수 있습니다.

 

1 2 3 5 6      

위와 같은 수열을 예로 들어서 설명드리겠습니다.

 

수열의 첫 수를 LIS에 넣어줍니다.

LIS의 마지막 수보다 현재 숫자가 더 크다면 LIS에 넣어줍니다.

그렇지 않다면 lower_bound를 활용해 현재 수보다 크거나 같은 수가 있는 곳의 index의 값을 현재 수로 바꿔줍니다.

위와 같은 방식으로 LIS를 채워주면 다음과 같은 결과를 얻을 수 있습니다.

 

유의할 점은 위의 방식으로 LIS를 구하면 길이는 구할 수 있지만 부분수열 자체는 구할 수 없습니다.

반응형

+ Recent posts