본문 바로가기

알고리즘/백준

백준 2352 반도체 설계

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

 

2352번: 반도체 설계

첫째 줄에 정수 n(1 ≤ n ≤ 40,000)이 주어진다. 다음 줄에는 차례로 1번 포트와 연결되어야 하는 포트 번호, 2번 포트와 연결되어야 하는 포트 번호, …, n번 포트와 연결되어야 하는 포트 번호가 주

www.acmicpc.net

 

LIS 알고리즘 문제다. 밑의 알고리즘에서 이진탐색을 이용해서 idx 값을 구했기 때문에 탐색에 O(logN)이고

N개의 숫자에 대해 이 탐색을 실행하기 때문에 O(NlogN)이다. 

 

이 문제는 LIS를 구할 때 "어떤 수열이 LIS인가?"를 묻지 않았기 때문에 그냥 개수만 찾았다.

그러면 arr에 들어있는 수열은 실제 LIS와 다를 확률이 아주아주 높다.

 

추적을 할 때는 index 배열을 추가로 설정하면 된다.

/* 반도체 설계 */

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

vector<int> arr;

int main(void) {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);

	int n; cin >> n;
	for (int i = 0; i < n; i++) {
		int temp; cin >> temp;
		if (arr.empty())
			arr.push_back(temp);
		else {
			int idx = lower_bound(arr.begin(), arr.end(), temp) - arr.begin();

			if (idx == arr.size()) {
				arr.push_back(temp);
			}
			else {
				arr[idx] = temp;
			}
		}
	}
	cout << arr.size();

	return 0;
}

'알고리즘 > 백준' 카테고리의 다른 글

백준 2213 트리의 독립집합  (0) 2020.08.09
백준 7579 앱  (0) 2020.08.07
백준 1918 후위 표기식  (0) 2020.08.06
백준 10217 KCM Travel  (0) 2020.08.05
백준 1202 보석 도둑  (0) 2020.08.03