๐ ๋ฌธ์
https://www.acmicpc.net/problem/1092
๐ ์์ด๋์ด
ํฌ๋์ธ์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ์ค์ํ๋ค๊ณ ์๊ฐํ์ต๋๋ค.
ํ ํฌ๋์ธ์ด ์ค์ ์ ์๋ ๋ฌผ๊ฑด๋ค์ค ๊ฐ์ฅ ๋ฌด๊ฑฐ์ด ๋ฌผ๊ฑด์ ์ ํํ๋ค๋ฉด ๊ฐ์ฅ ํจ์จ์ ์ผ๋ก ํฌ๋์ธ์ ์ฌ์ฉํ์ฌ ๋ชจ๋ ํ๋ฌผ์ ์ค์ ์ ์์๊ฒ์ด๋ผ ํ๋จํ์ฌ ์ด๋ถ ํ์์ ์ด์ฉํ์ฌ ํฌ๋์ธ์ด ์ค์ ์ ์๋ ๋ฌด๊ฒ N๋ณด๋ค ์์ ์์ค ๊ฐ์ฅ ํฐ ์ซ์๋ฅผ ์ ํํ์ต๋๋ค.
-1์ด ๋์ค๋ ๊ฒฝ์ฐ๋ ํฌ๋์ธ์ ์ฎ๊ธธ ์ ์๋ ๊ฐ์ฅ ํฐ ํ์ฉ๋ ๋ณด๋ค ๋ฌด๊ฑฐ์ด ํ๋ฌผ์ด ์๋๊ฒฝ์ฐ์ด๊ธฐ์ sort๋ฅผ ์ด์ฉํ์ฌ ์ ๋ ฌํ์ ๋น๊ตํ์์ต๋๋ค.
์ด๋ถํ์์์ ์ด๋ค ํ ์ซ์๋ณด๋ค ์์ ์์ค์ ๊ฐ์ฅ ํฐ ์๋ ์๋์ ๊ฐ์ ๋ก์ง์ผ๋ก ํด๊ฒฐํ ์ ์์ต๋๋ค
crane์ด ์ค์ ์ ์๋ ๊ฒฝ์ฐ result๋ฅผ ๊ฐฑ์ ํฉ๋๋ค.
//์ด๋ถํ์์ ์ ๋ ฌ๋์ด์์ด์ผ ํ๋ค.
//์์๊ฒ์ค ๊ฐ์ฅ ํฐ๊ฒ
private static int findMaxLower(int nowCrane) {
int start = 0;
int end = cargos.size() - 1;
int result = -1; //์์๊ฒ์ค์ ๊ฐ์ฅ ํฐ ๊ฐ
while (start <= end) {
int mid = (start + end) >> 1;
if (cargos.get(mid) <= nowCrane) {
result = mid; //์์๊ฒ์ ์ ์ฅํ๋ค.
start = mid + 1;
} else {
end = mid - 1;
}
}
return result;
}
๐ ํ์ด
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;
public class Main {
private static final List<Integer> cargos = new ArrayList<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int craneCnt = Integer.parseInt(br.readLine());
List<Integer> cranes = new ArrayList<>();
//input
st = new StringTokenizer(br.readLine());
for (int i = 0; i < craneCnt; i++) {
int now = Integer.parseInt(st.nextToken());
cranes.add(now);
}
int cargoCnt = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
for (int i = 0; i < cargoCnt; i++) {
cargos.add(Integer.parseInt(st.nextToken()));
}
//sort
Collections.sort(cranes);
Collections.sort(cargos);
//solution
if (cranes.get(craneCnt - 1) < cargos.get(cargoCnt - 1)) System.out.println(-1); //ํฌ๋์ธ์ด ์ค์ ์ ์๋ ๋ฌด๊ฒ๋ณด๋ค ๋ฌด๊ฑฐ์
else {
int cnt = 0;
while (!cargos.isEmpty()) {
cnt++;
for (int i = 0; i < craneCnt && !cargos.isEmpty(); i++) {
removeCargo(cranes.get(i));
}
}
System.out.println(cnt);
}
}
private static void removeCargo(int nowCrane) {
int idx = findLower(nowCrane);
if (idx != -1) {
//ํด๋น ํฌ๋์ธ์ผ๋ก ์ฎ๊ธธ ์ ์๋ ํ๋ฌผ์ด ์๋ ๊ฒฝ์ฐ
cargos.remove(idx);
}
}
//์์๊ฒ์ค ๊ฐ์ฅ ํฐ๊ฒ
private static int findMaxLower(int nowCrane) {
int start = 0;
int end = cargos.size() - 1;
int result = -1; //์์๊ฒ์ค์ ๊ฐ์ฅ ํฐ ๊ฐ
while (start <= end) {
int mid = (start + end) >> 1;
if (cargos.get(mid) <= nowCrane) {
result = mid; //์์๊ฒ์ ์ ์ฅํ๋ค.
start = mid + 1;
} else {
end = mid - 1;
}
}
return result;
}
}
'๋ฐฑ์ค(boj)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA]1063 ํน, ๊ตฌํ, ์ค๋ฒ3 (0) | 2023.05.31 |
---|---|
[JAVA]17143 ๋์์ (1) | 2023.05.29 |
[JAVA]2758 ๋ก๋(dfs ์๊ฐ์ด๊ณผ/ dp) (0) | 2023.05.28 |
[๋ฐฑ์ค Java] 4963 ์ฌ์ ๊ฐ์ (0) | 2023.05.26 |
[JAVA]22862 ๊ฐ์ฅ ๊ธด ์ง์ ์ฐ์ํ ๋ถ๋ถ์์ด (0) | 2023.05.18 |