-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathHW_43236_2.java
More file actions
45 lines (39 loc) ยท 1.91 KB
/
HW_43236_2.java
File metadata and controls
45 lines (39 loc) ยท 1.91 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
38
39
40
41
42
43
44
45
// ์๊ฐ ๋ณต์ก๋ : distance <= 10^9, ์ด๋ถ ํ์์ผ๋ก ํ์ ๋ฒ์ ์ค์ฌ์ฃผ๊ธฐ, O(logN)
// ๋ฐ์ ์ ๋ ฌ O(M log M)
// ๊ฐ ๋ฐ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๊ณ , ์ด ์ฌ์ด ์ต์๊ฐ์ ์ด๋ถ ํ์์ผ๋ก ์ฐพ๊ธฐ
// ๋ฐ์ ์ฌ์ด ๊ฑฐ๋ฆฌ์ ์ต์๊ฐ ์ค ์ต๋๊ฐ์ ๊ตฌํ๋ ๋ฌธ์
// ๋ฐ์ n๊ฐ๋ฅผ ์ ์ ํ ์ ๊ฑฐํด์ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ ๋ฐ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๊ฐ ์ต๋ํ ๋ฉ์ด์ง๋๋ก ํด์ผ ํจ
// ๋งค๊ฐ๋ณ์ ์ด๋ถ ํ์ : ์ด๋ค ๊ฐ์ด ์กฐ๊ฑด์ ๋ง์กฑํ๋์ง ์ฌ๋ถ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฒ์๋ฅผ ์ขํ๊ฐ๋ฉฐ ์ต์ ์ ๊ฐ์ ์ฐพ์
// mid(๋ฐ์ ์ฌ์ด์ ์ต์ ๊ฑฐ๋ฆฌ)๊ฐ n(์ ๊ฑฐํ ๋ฐ์ ์) ์กฐ๊ฑด์ ๋ง์กฑํ๋์ง ์ฌ๋ถ ๊ธฐ์ค์ผ๋ก ๋ฒ์๋ฅผ ์ขํ ๋๊ฐ๋ฉฐ ๊ฑฐ๋ฆฌ์ ์ต์๊ฐ ์ค ์ต๋๊ฐ์ ์ฐพ์
import java.util.*;
class HW_43236_2 {
public int solution(int distance, int[] rocks, int n) {
Arrays.sort(rocks);
int answer = 0;
int left = 0; // ์ต์ ๊ฑฐ๋ฆฌ
int right = distance; // ์ต๋ ๊ฑฐ๋ฆฌ
while(left <= right){
// ๋ฐ์ ์์น๋ฅผ ํ์ ํด์ค์ผํจ
int mid = (left+right)/2; // ๋ฐ์ ์ฌ์ด์ ์ต์ ๊ฑฐ๋ฆฌ ํ๋ณด
int removeCnt = 0; // ์ ๊ฑฐํ ๋ฐ์ ์ cnt
int prev = 0; // ์ด์ ๋ฐ์
for(int i=0; i<rocks.length; i++){
if(rocks[i]-prev<mid){ // ๋ฐ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๊ณ mid๋ณด๋ค ์์ ๊ฒฝ์ฐ
removeCnt++; // ์ ๊ฑฐํ ๋ฐ์ ์++
} else{
prev = rocks[i]; // ๋ฐ์ ์ ์ง
}
}
if(distance - prev < mid){ // ๋์ฐฉ ์ง์ ๊น์ง์ ๊ฑฐ๋ฆฌ ์ฒดํฌ
removeCnt++;
}
if(removeCnt<=n){ // ์ ๊ฑฐํ ๋ฐ์์๊ฐ ๋์ง ์์ ๊ฒฝ์ฐ
answer = mid; // ์ ๋ต๊ฐ ๊ฐฑ์
left = mid+1;
} else{
right = mid-1;
}
}
return answer;
}
}