2023. 8. 29. 16:50ใCoding Test/BOJ
๐๋ฌธ์ ๋ณด๋ฌ๊ฐ๊ธฐ
11053๋ฒ: ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด
์์ด A๊ฐ ์ฃผ์ด์ก์ ๋, ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ์๋ฅผ ๋ค์ด, ์์ด A = {10, 20, 10, 30, 20, 50} ์ธ ๊ฒฝ์ฐ์ ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ A = {10, 20, 10, 30, 20, 50} ์ด
www.acmicpc.net
๐ง๐ปโ๐ปํ์ด ๊ณผ์
์ต์ฅ ์ฆ๊ฐ ๋ถ๋ถ ์์ด(LIS) ์๊ณ ๋ฆฌ์ฆ์ ์ ์๊ฒ ์ฒ์ ์ ํด๋ณด๋ ๊ฐ๋
์ด์์ต๋๋ค. ๊ทธ๋์ ํด๋น ๊ฐ๋
์ ๋ํด ๋จผ์ ๊ณต๋ถํ์๊ณ , ๊ธฐ์กด
๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์์ต๋๋ค.
- ์ต์ฅ ์ฆ๊ฐ ๋ถ๋ถ ์์ด ์ซ์๋ค์ ๋ด์ ๋ฐฐ์ด์ ์ค๋นํ๋ค.
- ์
๋ ฅ๋ ์ซ์์ ๋ํ์ฌ, ๋ค์ ๊ณผ์ ์ ์งํํ๋ค.
- ๋ฐฐ์ด์ด ๋น์๊ฑฐ๋, ๋ฐฐ์ด์ ๋ง์ง๋ง ์์๋ณด๋ค ์ ๋ ฅ๋ ์ซ์๊ฐ ํฌ๋ค๋ฉด, ๋ฐฐ์ด์ ๋ง์ง๋ง ์์ ๋ค์ ์ถ๊ฐํ๋ค.
- ๊ทธ๊ฒ ์๋๋ผ๋ฉด, ์ด์ง ํ์์ ํตํด ์
๋ ฅ๋ ์ซ์๊ฐ ๋ค์ด๊ฐ ์ธ๋ฑ์ค ๋ฒํธ๋ฅผ ์ฐพ๋๋ค.
- ํด๋น ์ธ๋ฑ์ค์ ์ ๋ ฅ๋ ์ซ์๋ฅผ ์ ์ฅํ๋ค.
๋ฐฐ์ด์ ๋ง์ง๋ง ์์ ์ธ๋ฑ์ค๋ฅผ i๋ผ๊ณ ํ๋ฉด, ๊ธฐ์กด
์ข ์ข ์ ์ฉํ๊ฒ ์ฐ์ผ ๊ฒ ๊ฐ์, ์์๋๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค์!
โ๏ธ์์ค ์ฝ๋ ๋ฐ ๊ฒฐ๊ณผ
#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 |