Tags
- LV2
- ๊ทธ๋ํ ์ด๋ก
- ๋ฌธ์์ด
- Dynamic Programming
- queue
- ๊น์ด ์ฐ์ ํ์
- Java
- ๋ฐฑํธ๋ํน
- stack
- DP
- Study
- ๊ทธ๋ํ ํ์
- BFS
- Brute Force Algorithm
- BOJ
- PGM
- ์ ๋ ฌ
- ์๋ฎฌ๋ ์ด์
- greedy
- ์ ์๋ก
- ๊ต์ฌ
- ์๋ฃ๊ตฌ์กฐ
- Python
- CodingTest
- ์ํ
- dfs
- SpringBoot
- sort
- ๋๋น ์ฐ์ ํ์
- ๊ตฌํ
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_12015 : ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด 2 ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- ์ฃผ์ด์ง ์์ด A์ ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด (LIS)์ ๊ธธ์ด๋ฅผ ์ถ๋ ฅํ๋ค.
๐ธ ๋ฌธ์ ํ์ด ๐ธ
- n์ด 100๋ง์ด๋ฏ๋ก LIS์ ๊ฐ๋จํ ํ์ด ๋ฒ์ธ DP๋ฅผ ์ฌ์ฉํ๋ฉด, O(n^2)์ผ๋ก 1์กฐ๋ก ์๊ฐ์ ์ด๊ณผํ๋ค.
- LIS์ ๋ ๋ฒ์งธ ํ์ด๋ฒ์ธ ์ด๋ถ ํ์์ ์ด์ฉํด O(nlogn)์ผ๋ก ํ์ดํ๋ค. (600๋ง)
- LIS ๋ฐฐ์ด์ ์ ๋ ฅ ๋ฐฐ์ด ์์๋ฅผ ํ๋์ฉ ๊ณจ๋ผ ์ฑ์๊ฐ๋ค.
- ์ ๋ ฅ ๋ฐฐ์ด์ ์์๋ฅผ ์ฑ์ธ ์๋ฆฌ๋ ์ด๋ถ ํ์์ผ๋ก ๊ตฌํ๋ค.
๐ธ ์ฝ๋ ๐ธ
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
int[] A = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
A[i] = Integer.parseInt(st.nextToken());
}
int[] LIS = new int[N];
int len = 1;
LIS[0] = A[0];
for (int i = 1; i < N; i++) {
if (LIS[len - 1] < A[i]) { // ์ ๋ต ๋ฐฐ์ด ๋ค์ ์ถ๊ฐ
LIS[len++] = A[i];
} else if (LIS[len - 1] > A[i]) { // ๋ค์ด๊ฐ ์๋ฆฌ ์ด์ง ํ์
int mid = len / 2;
int move = mid / 2;
while (true) {
if (mid == 0) {
break;
} else if (LIS[mid - 1] < A[i] && A[i] <= LIS[mid]) {
break;
} else if (A[i] < LIS[mid]) { // ์ผ์ชฝ ํ์
mid -= move;
} else { // ์ค๋ฅธ์ชฝ ํ์
mid += move;
}
move = Math.max(1, move / 2);
}
LIS[mid] = A[i];
}
}
bw.write(Integer.toString(len));
bw.flush();
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- ๋ฐฐ์ด LIS์ ์์๋ฅผ ์ฑ์๊ฐ๋ฉฐ ์ ๋ต์ ๊ตฌํ๋ค.
- LIS์ ๋ง์ง๋ง ์์ LIS[len - 1]์ด ์ ๋ ฅ ๋ฐฐ์ด์ ํ์ฌ ์์ A[i]๋ณด๋ค ์๋ค๋ฉด, ๋ฐ๋ก ๋ง์ง๋ง ๋ถ๋ถ์ A[i]๋ฅผ ์ถ๊ฐํ๋ค.
- A[i]๊ฐ ๋ ์๋ค๋ฉด, LIS ์ค๊ฐ์ ๋ค์ด๊ฐ ์๋ฆฌ๋ฅผ ์ด๋ถ ํ์์ผ๋ก ๊ตฌํ๋ค.
- ์ด๋ถ ํ์์ ๋ชฉ์ ์ LIS[mid-1] < A[i] <= LIS[mid] ์ ํด๋นํ๋ mid๋ฅผ ์ฐพ๋ ๊ฒ์ด๋ค.
- mid == 0 ์ผ ๋, LIS[mid-1] ๊ฐ ์ค๋ฅ๋๋ฏ๋ก ๋ฐ๋ก ์ฒ๋ฆฌํด์ฃผ์ด์ผ ํ๋ค.
- ์ต์ข
๊ตฌํด์ง LIS ๋ฐฐ์ด์ ๊ธธ์ด len์ ์ถ๋ ฅํ๋ค.
- LIS ๋ฐฐ์ด์ด ์ ํํ ์ ๋ต ๋ฐฐ์ด์ ์๋๋ค.
๐ธ end ๐ธ
- LIS์ DP ํ์ด๋ง ์๊ณ ์์๋๋ฐ, ์ด๋ถ ํ์ ํ์ด์ ๋ํด์ ์๊ฒ๋์๊ณ ํฌ์คํ
์ผ๋ก ์ ๋ฆฌํ๋ค.
- LIS๊ด๋ จ ๋ฌธ์ ๋ ์์ง ๋ง๊ณ , ์ด๋ถ ํ์์ผ๋ก ํ์์๋ ์์ ๋ชฉ๋ก์ ์ถ๋ ฅํ๋ ๋ฌธ์ ๋ ํ์ด๋ณด์ง ์์์ ๋ ์ฐ์ตํด์ผ๊ฒ ๋ค.
- mid๊ฐ 0 ์ผ ๋์ ์ฒ๋ฆฌ๋ฅผ ํ์ง ์์ 1ํ ํ๋ ธ๋ค.
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_2143 : ๋ ๋ฐฐ์ด์ ํฉ (0) | 2024.04.10 |
---|---|
BOJ_1644 : ์์์ ์ฐ์ํฉ (0) | 2024.04.09 |
BOJ_1005 : ACM Craft (0) | 2024.04.04 |
BOJ_12100 : 2048 (Easy) (0) | 2024.03.31 |
BOJ_20040 : ์ฌ์ดํด ๊ฒ์ (0) | 2024.03.29 |