forked from GreatAlgorithm-Study/AlgorithmStudy
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHW_64062.java
More file actions
35 lines (33 loc) Β· 1.46 KB
/
HW_64062.java
File metadata and controls
35 lines (33 loc) Β· 1.46 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
// μκ° λ³΅μ‘λ : stones.length<=200_000 -> O(N^2) λΆκ°
// μμ νμ -> μκ° μ΄κ³Ό -> μ΄λΆ νμμΌλ‘ νμ λ²μ μ€μ¬μ€ -> O(N logN)
// μ§κ²λ€λ¦¬λ₯Ό 건λ μ μλ μ΅λ λλμ¦ μΉκ΅¬λ€μ μ ꡬνκΈ°
// νλͺ
μ© μ§κ²λ€λ¦¬λ₯Ό 건λλ κ²½μ°νμ¬ λμ μ€μ΄λ κ³Όμ -> μκ°μ΄κ³Ό
// μ΄λΆνμμΌλ‘ νΉμ μΈμμ΄ κ±΄λ μ μλμ§ μ¬λΆλ§ νμΈ
class HW_64062 {
public int solution(int[] stones, int k) {
int answer = 0;
int start = 0;
int end = Integer.MAX_VALUE;
while(start <= end){
int mid = (start + end)/2; // 건λ μ μλ μ¬λμ μ
if(check(mid, k, stones)){ // true (midλͺ
κΉμ§ 건λ μ μλ κ²½μ°)
answer = mid;
start = mid+1; // (mid+1)λͺ
κΉμ§ 건λ μ μλμ§ νμΈ
} else{ // false
end = mid-1;
}
}
return answer;
}
public boolean check(int mid, int k, int[] stones){ // midλͺ
μ΄ κ±΄λ μ μλμ§ νλ¨
int cnt = 0; // μ°μμΌλ‘ 건λ μ μλ λμ κ°μ
for(int i = 0; i < stones.length; i++) {
if(stones[i] < mid) { // νμ¬ λμ midλͺ
μ΄ κ±΄λλ €κ³ ν λ
cnt++;
if(cnt>=k) // μ°μμΌλ‘ 건λ μ μλ λμ΄ kκ° μ΄μμΌ κ²½μ°
return false;
} else cnt=0; // μ°μμ± λκΉ
}
return true;
}
}