[C++] BOJ 12015 - ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด 2Problem Solving/Baekjoon Online Judge (BOJ)2025. 4. 13. 15:50
Table of Contents

01. ๐ ๋ฌธ์ ํ์
N: ์์ด A์ ํฌ๊ธฐ (1 <= N <= 1e6)
* ์ฃผ์ด์ง ์์ด A์์ ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ ๊ตฌํ๋ ๋ฌธ์
01-1. ๊ฐ๋ฅํ ์๊ฐ ๋ณต์ก๋
- N์ ์ต๋ ํฌ๊ธฐ๊ฐ 1e6์ผ๋ก ์๊ฐ ๋ณต์ก๋ O(N log N) ์ดํ๋ก ๊ตฌํ ๊ฐ๋ฅ
01-2. ์๊ณ ๋ฆฌ์ฆ ์ ํ
- ์์ด A๋ฅผ 1ํ ๋ฐ๋ณตํ๋ฉฐ, ์ด๋ถ ํ์์ ํตํด ๋ถ๋ถ ์์ด์ ์ฐพ์ผ๋ฉด O(N log N)์ ์๊ฐ ๋ณต์ก๋๋ ๊ฐ์ง
02. ๐ ์ฝ๋ ์ค๊ณํ๊ธฐ
- ์์ด์ ํฌ๊ธฐ N๊ณผ ์์ด์ ์์ N๋ฅผ ์ฐจ๋ก๋๋ก ์ ๋ ฅ
- ์์ ์
๋ ฅ ์, ๋ถ๋ถ ์์ด ๋ฐฐ์ด(lis)์ ํด๋น ์์๋ฅผ ์ด๋ถ ํ์
2-1. ํ์ํ์ฌ ๋์จ index๊ฐ ๋ถ๋ถ ์์ด ๋ฐฐ์ด์ ํฌ๊ธฐ์ ๊ฐ์ ๊ฒฝ์ฐ, ์๋ก์ด ์์๋ก ์ถ๊ฐ
2-2. ์๋ ๊ฒฝ์ฐ, ๋์จ index์ ๋ถ๋ถ์ ํ์ฌ ์์๋ก ๋์ฒด
(Greedy| ๋ ์์ ์์๋ก ๋์ฒดํ๋ ๊ฒ์ผ๋ก, ํ์ฌ ๋ถ๋ถ ์์ด์ ์ต๋ ๊ธธ์ด๋ฅผ ์ ์งํ๋ฉด์
๋ค์ ๋ฑ์ฅํ ๋ถ๋ถ ์์ด์ ๊ธธ์ด๊ฐ ๋ ๊ธธ ๊ฒฝ์ฐ ๊ฐฑ์ ํ ์ ์์) - ๋ถ๋ถ ์์ด ๋ฐฐ์ด(lis)์ ํฌ๊ธฐ ์ถ๋ ฅ
03. ๐ ๏ธ ์๋๋ณ ์์
1ํ์ฐจ
04. ๐๏ธ ์ ๋ต ์ฝ๋
#include <bits/stdc++.h>
using namespace std;
int lower_bound(vector<int>& lis, int target){
int left = 0, right = lis.size();
while(left < right){
int mid = (left + right) / 2;
if(lis[mid] < target) left = mid + 1;
else right = mid;
}
return left;
}
int main(){
cin.tie(0) -> sync_with_stdio(0);
int N;
cin >> N;
vector<int> lis;
for(int i = 0, el; i < N; i++){
cin >> el;
int pos = lower_bound(lis, el);
if(pos == lis.size()) lis.push_back(el);
else lis[pos] = el;
}
cout << lis.size() << "\n";
return 0;
}
'Problem Solving > Baekjoon Online Judge (BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [C++] BOJ 14499 - ์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ (1) | 2025.04.15 |
|---|---|
| [C++] BOJ 1561 - ๋์ด ๊ณต์ (1) | 2025.04.14 |
| [C++] BOJ 2473 - ์ธ ์ฉ์ก (0) | 2025.04.12 |
| [C++] BOJ 1477 - ํด๊ฒ์ ์ธ์ฐ๊ธฐ (0) | 2025.04.11 |
| [C++] BOJ 1806 - ๋ถ๋ถํฉ (0) | 2025.04.10 |
@ONE_ :: ์ ํธ์
์๋ชป๋ ์ ๋ณด๊ฐ ์๋ค๋ฉด ๋ง์ํด์ฃผ์ธ์!