[Java] BOJ 12014 - ์ฃผ์Problem Solving/Baekjoon Online Judge (BOJ)2025. 4. 26. 18:42
Table of Contents

01. ๐ ๋ฌธ์ ํ์
1๊ฐ ํ์ฌ์ ๋ํ ๋ฏธ๋ N์ผ๊ฐ ์ฃผ์ ๋ณ๋์ ๊ฐ์ง๊ณ ์์
N์ผ๊ฐ ์ฃผ์ ๊ฐ๊ฒฉ N๊ฐ๊ฐ ์ฃผ์ด์ง
์ฃผ์ด์ง ์ฃผ๊ฐ๋ฅผ ๋ฐํ์ผ๋ก ์ฃผ์์ K๋ฒ ๋งค์ํ๊ธฐ๋ก ํจ
(๋จ, ํ๋ฃจ์ 1๋ฒ ๋งค์ ๊ฐ๋ฅ)
๋ํ, ์ง์ ๋ ์ ๋งค์ํ๋ ์ฃผ๊ฐ๋ณด๋ค ๋์ ์ฃผ๊ฐ์ ๊ตฌ๋งคํด์ผ ํจ
(๋งค์ํ๋ ์ฃผ๊ฐ๊ฐ ์ ์ ์์นํ๋ค๋ ๋ง)
N: N์ผ์ ๋ํ ์ฃผ๊ฐ N๊ฐ
K: ํฌ๋ง ๊ฑฐ๋ ํ์
- ์ฃผ์ด์ง N๊ฐ์ ์ฃผ๊ฐ์๋ํด ํ๋ฃจ์ ํ ๋ฒ ๊ตฌ๋งคํ๋ค๊ณ ํ์ ๋, ์ ์ ์์นํ๋๋ก K๋ฒ ๊ตฌ๋งคํ ์ ์๋ ์ง ์ฌ๋ถ๋ฅผ ์ถ๋ ฅ
01-1. ์๊ณ ๋ฆฌ์ฆ ์ ํ & ์๊ฐ ๋ณต์ก๋
- LIS(์ต์ฅ ์ฆ๊ฐ ๋ถ๋ถ ์์ด) ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ ์ ์ฆ๊ฐํ๋๋ก ์์ด์ ๋ง๋ค์์ ๋, ๊ทธ ๊ธธ์ด๊ฐ K ์ด์์ด๋ฉด ๊ฐ๋ฅํ ๊ฒฝ์ฐ์ ์์ด๋ค.
- ์ฃผ์ด์ง ์ฃผ๊ฐ N์ ๋ํด์ 1๋ฒ ํ์ํ๋ฉฐ, ์์ด์ ์๋ฆฌ๋ฅผ ์ด๋ถํ์์ผ๋ก ์ ์ ์์ผ๋ฏ๋ก, ์๊ฐ ๋ณต์ก๋๋ $O(N log N)$
02. ๐ ์ฝ๋ ์ค๊ณํ๊ธฐ
- N์ผ์ ๋ํ ์ฃผ๊ฐ N๊ฐ์ ํฌ๋ง ๋งค์ ํ์ K๋ฅผ ์ ๋ ฅ
- ์ฃผ๊ฐ๋ฅผ 1๋ถํฐ N๊น์ง ์์ฐจ์ ์ผ๋ก, ์์ด์ ๋ค์ด๊ฐ ์ ์๋ ์๋ฆฌ๋ฅผ ์ด๋ถํ์
- lowerBound๋ก ํ์ํ๋ฉฐ, ํ์ ์ค์ธ ์์ ๊ฐ๊ฑฐ๋ ํฐ ์๊ฐ ์์ ๊ฒฝ์ฐ list์ ์ถ๊ฐ
- ํ์ ์ค์ธ ์์ ๊ฐ๊ฑฐ๋ ํฐ ์๊ฐ ์ต์ด๋ก ๋ฑ์ฅ์, ๊ทธ ์์น์ ์๋ก์ด ์๋ก ๋์ฒด
- list๋ LIS์ ๋ํ ์ต๋ ๊ธธ์ด๋ฅผ ๋ํ๋ $\rightarrow$ ๋ฐ๋ผ์, ๊ธธ์ด๊ฐ K์ ๊ฐ๊ฑฐ๋ ํฌ๋ค๋ฉด K๋ฒ ๊ตฌ๋งคํ ์ ์๋ค๋ ์๋ฏธ
(์์๋ ๋ค๋ฅผ ์ ์์)
03. ๐ ๏ธ ์๋๋ณ ์์
1ํ์ฐจ
04. ๐๏ธ ์ ๋ต ์ฝ๋
import java.io.*;
import java.util.*;
public class Main {
final static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
final static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
static int N, K;
static int[] arr;
public static StringTokenizer input() throws IOException{
return new StringTokenizer(br.readLine());
}
public static void print(Object o) throws IOException{
String s = String.valueOf(o);
bw.write(s);
}
public static int lowerBound(List<Integer> list, int target){
int left = 0, right = list.size();
while(left < right){
int mid = (left+right)/2;
if(list.get(mid) < target) left = mid+1;
else right = mid;
}
return left;
}
public static int solution() throws IOException{
List<Integer> stock = new ArrayList<>();
for(int i = 0; i < N; i++){
int idx = lowerBound(stock, arr[i]);
if(stock.size() == idx) stock.add(arr[i]);
else stock.set(idx, arr[i]);
}
if(stock.size() >= K) return 1;
else return 0;
}
public static void main(String[] args) throws IOException {
StringTokenizer st = input();
int T = Integer.valueOf(st.nextToken());
for(int i = 0; i < T; i++){
st = input();
N = Integer.valueOf(st.nextToken());
K = Integer.valueOf(st.nextToken());
arr = new int[N];
st = input();
for(int j = 0; j < N; j++) arr[j] = Integer.valueOf(st.nextToken());
print("Case #" + (i+1) + "\n");
print(solution() + "\n");
}
bw.flush();
bw.close();
br.close();
}
}'Problem Solving > Baekjoon Online Judge (BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Java] BOJ 1005 - ACM Craft (0) | 2025.04.29 |
|---|---|
| [Java] BOJ 2842 - ์ง๋ฐฐ์ ํ์๋ (0) | 2025.04.27 |
| [C++] BOJ 1938 - ํต๋๋ฌด ์ฎ๊ธฐ๊ธฐ (0) | 2025.04.25 |
| [C++] BOJ 2515 - ์ ์์ฅ (0) | 2025.04.24 |
| [C++] BOJ 15685 - ๋๋๊ณค ์ปค๋ธ (0) | 2025.04.23 |
@ONE_ :: ์ ํธ์
์๋ชป๋ ์ ๋ณด๊ฐ ์๋ค๋ฉด ๋ง์ํด์ฃผ์ธ์!