2023. 8. 29. 16:50γCoding Test/BOJ
πλ¬Έμ 보λ¬κ°κΈ°
π§π»π»νμ΄ κ³Όμ
μ΅μ₯ μ¦κ° λΆλΆ μμ΄(LIS) μκ³ λ¦¬μ¦μ μ μκ² μ²μ μ ν΄λ³΄λ κ°λ μ΄μμ΅λλ€. κ·Έλμ ν΄λΉ κ°λ μ λν΄ λ¨Όμ 곡λΆνμκ³ , κΈ°μ‘΄ \( O(n^2) \)μ μκ°λ³΅μ‘λλ₯Ό κ°μ§λ μκ³ λ¦¬μ¦μ μ΄μ§ νμ(Binary Search)μ νμ©νμ¬ \( O(nlogn) \)μΌλ‘ μ€μ΄λ λ°©λ²μ λν΄μλ μκ² λμμ΅λλ€.
λ°©λ²μ λ€μκ³Ό κ°μμ΅λλ€.
- μ΅μ₯ μ¦κ° λΆλΆ μμ΄ μ«μλ€μ λ΄μ λ°°μ΄μ μ€λΉνλ€.
- μ
λ ₯λ μ«μμ λνμ¬, λ€μ κ³Όμ μ μ§ννλ€.
- λ°°μ΄μ΄ λΉμκ±°λ, λ°°μ΄μ λ§μ§λ§ μμλ³΄λ€ μ λ ₯λ μ«μκ° ν¬λ€λ©΄, λ°°μ΄μ λ§μ§λ§ μμ λ€μ μΆκ°νλ€.
- κ·Έκ² μλλΌλ©΄, μ΄μ§ νμμ ν΅ν΄ μ
λ ₯λ μ«μκ° λ€μ΄κ° μΈλ±μ€ λ²νΈλ₯Ό μ°Ύλλ€.
- ν΄λΉ μΈλ±μ€μ μ λ ₯λ μ«μλ₯Ό μ μ₯νλ€.
λ°°μ΄μ λ§μ§λ§ μμ μΈλ±μ€λ₯Ό iλΌκ³ νλ©΄, κΈ°μ‘΄ \(O(n^2) \) μκ³ λ¦¬μ¦μ 0 ~ i - 1κΉμ§ μλ‘ μ λ ₯λ μ«μμ λΉκ΅νμ¬ λ€μ΄κ° μ리λ₯Ό μ°Ύμλλ°, μ΄κ±Έ μ΄μ§ νμμ νμ©νμ¬ νμ μκ°μ ν¬κ² μ€μλ€κ³ λ³Ό μ μμ΅λλ€.
μ’ μ’ μ μ©νκ² μ°μΌ κ² κ°μ, μμλλ©΄ μ’μ κ² κ°λ€μ!
βοΈμμ€ μ½λ λ° κ²°κ³Ό
#include <iostream>
#include <vector>
#include <algorithm>
#define FAST_IO ios::sync_with_stdio(false); cout.tie(NULL); cin.tie(NULL);
using namespace std;
int GetIndexWithBinarySearch(const vector<int>& sequence, int data)
{
if (sequence.empty())
return 0;
return lower_bound(sequence.begin(), sequence.end(), data) - sequence.begin();
}
int main()
{
FAST_IO;
int N;
cin >> N;
vector<int> sequence;
for (int i = 0; i < N; i++)
{
int data;
cin >> data;
int index = GetIndexWithBinarySearch(sequence, data);
if (index < sequence.size())
sequence[index] = data;
else
sequence.push_back(data);
}
cout << sequence.size();
return 0;
}
'Coding Test > BOJ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[BOJ] 1992λ² | μΏΌλνΈλ¦¬ (C++) (0) | 2023.08.31 |
---|---|
[BOJ] 2630λ² | μμ’ μ΄ λ§λ€κΈ° (C++) (0) | 2023.08.31 |
[BOJ] 25682λ² | 체μ€ν λ€μ μΉ νκΈ° 2 (C++) (0) | 2023.08.29 |
[BOJ] 11660λ² | κ΅¬κ° ν© κ΅¬νκΈ° 5 (C++) (0) | 2023.08.29 |
[BOJ] 2559λ² | μμ΄ (C++) (0) | 2023.08.27 |