Problem Solving/Baekjoon

[백준 / BOJ] 2352 반도체 설계

msmn 2021. 3. 28. 21:27
728x90

 

알고리즘 분류: DP

문제 링크: www.acmicpc.net/problem/2352

 

2352번: 반도체 설계

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

www.acmicpc.net

  • LIS를 활용한 DP로 해결했다.
  • n이 4만이므로 n^2가 8억이므로 시간초과가 발생한다.
  • 이분탐색을 활용하여 O(nlogn)으로 해결했다.
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <iostream>
#include <climits>
#include <cstring>
#include <iomanip>
#include <bitset>
#include <string>
#include <vector>
#include <cmath>
#include <queue>
#include <stack>
#include <list>
#include <map>
#include <set>

#define ll long long
#define INF 1e9

using namespace std;

//https://www.acmicpc.net/problem/2352 반도체 설계

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    
    int n, a;
    vector<int> dp(1); // dp[a] : 길이가 a인 LIS들의 마지막 숫자의 최솟값
    cin >> n;
    
    while(n--) {
        cin >> a;
        if(dp.back() < a) dp.push_back(a);
        else *lower_bound(dp.begin(), dp.end(), a) = a;
    }
    cout << dp.size() - 1;

    return 0;
}

 

728x90

'Problem Solving > Baekjoon' 카테고리의 다른 글

[백준 / BOJ] 3055 탈출  (0) 2021.07.08
[백준 / BOJ] 3425 고스택  (0) 2021.07.08
[백준 / BOJ] 1904 01타일  (0) 2021.03.19
[백준 / BOJ] 9663 N-Queen  (0) 2021.03.18
[백준 / BOJ] 1629 곱셈  (0) 2021.03.18