-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathJW_43236.java
More file actions
37 lines (36 loc) ยท 1.76 KB
/
JW_43236.java
File metadata and controls
37 lines (36 loc) ยท 1.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import java.util.Arrays;
class JW_43236 {
public int solution(int distance, int[] rocks, int n) {
int answer = 0;
Arrays.sort(rocks); // ์ด๋ถ ํ์์ ์ํ ์ ๋ ฌ
int l = 1, r = distance; // ์ด๋ถ ํ์์ ์ต์, ์ต๋ ๊ฒฝ๊ณ ์ค์
// ์ด๋ถ ํ์์ ํตํด ์ต์ ์ ์ต์ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ์
while (l <= r) {
int m = (l + r) / 2; // ๊ฐ ๋ฐ์ ์ฌ์ด์ ์ต์ ๊ฑฐ๋ฆฌ
// ํด๋น ๊ฑฐ๋ฆฌ๋ก ์ง์ธ ์ ์๋ ๋ฐ์ ์ ๊ณ์ฐ
if (isPossible(distance, rocks, m, n)) {
answer = m; // ๊ฐ๋ฅํ๋ฉด ๊ทธ ๊ฑฐ๋ฆฌ๋ฅผ ์ ๋ต์ผ๋ก ์ ์ฅ
l = m + 1; // ๋ค์ ํ์(์ต์ ๊ฑฐ๋ฆฌ ์ค ์ต๋๊ฐ)์ ์ํด ์ผ์ชฝ ๊ฒฝ๊ณ ์ฌ์ค์
} else
r = m - 1; // ๋ถ๊ฐ๋ฅํ๋ฉด ๋ ์์ ์ต์ ๊ฑฐ๋ฆฌ๋ฅผ ํ์
}
return answer;
}
// ํด๋น target์ ๊ธธ์ด๋ก ์์จ ์ ์๋ ๋ฐ์์ ๊ฐ์๋ฅผ ๋ฐํ
private boolean isPossible(int distance, int[] rocks, int target, int n) {
int now = 0; // ์์ ๋ฐ์
int removed = 0; // ์ ๊ฑฐ๋ ๋ฐ์ ์
// ๋ ๋ฐ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๊ฐ target๋ณด๋ค ์๋ค๋ฉด ์์ฐ
for (int i = 0; i < rocks.length; i++) {
if (rocks[i] < now + target)
removed++;
else
now = rocks[i]; // ๊ฑฐ๋ฆฌ๊ฐ ์ถฉ๋ถํ๋ฉด ํ์ฌ ๋ฐ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฐฑ์
}
// ๋ง์ง๋ง ๋ฐ์(distance)๊น์ง ๊ฑฐ๋ฆฌ๋ ํ์ธ
if (distance < now + target)
removed++;
return removed <= n; // ํ์ฌ ๊ฑฐ๋ฆฌ๋ก ๊ฐ๋ฅํ๋์ง ๋ฐํ
// ๋ถ๋ฑํธ๊ฐ ๋ค์ด๊ฐ๋ ์ด์ ๋ ์๋ฌด๊ฑฐ๋ ์ง์์ n๊ฐ๋ฅผ ๋ง์ถ ์ ์์ด์ ์๊ด์์.
}
}