알고리즘87 :: 프로그래머스_징검다리건너기
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
|
package programmers;
public class 징검다리건너기 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] stones = {2, 4, 5, 3, 2, 1, 4, 2, 5, 1};
int k = 3;
int low = 1;
int high = 200000001;
int mid = 0;
while(low<=high) {
int count = 0;
mid = (low + high)/2;
for(int i=0; i<stones.length; i++) {
if(stones[i] - mid <=0)
count++ ;
else
count=0;
if(count>=k) {
high = mid-1;
break;
}
}//
if(count<k) {
low = mid+1;
}
}
System.out.println(low);
}
}
|
cs |
이 문제는 https://cjh5414.github.io/binary-search/
https://ksdyoung.tistory.com/69
참고해서 해결했다.
결과적으로 봤을 때는
https://tech.kakao.com/2020/04/01/2019-internship-test/
내용에서 가이드라인이 제시되어 있다.
범위가 1~200,000,000 이기 때문에 초기값을 설정하고
mid = (시작+끝)/2 가 돌다리를 건널 수 있는 인원이다.
돌다리 개수(=k) 개가 0이 되는 연속된 개수를 파악한다.
0이 연속된 개수가 k개를 넘게 되면 돌다리를 건널 수 없는 범위가 되기 때문에 끝을 mid-1로 변경하고 반대로 돌다리를 건널 수 있다면 mid+1 로 변경해서 최종적으로는 시작이 끝보다 커지면 최대의 인원이 돌다리를 건널 수 있게 되는 경우이다.
이분탐색 문제를 오랜만에 봐서 감이 없었다. 하핳... 어렵네
'알고리즘' 카테고리의 다른 글
알고리즘89 :: SWEA_스도쿠검증 (0) | 2020.07.23 |
---|---|
알고리즘 88 :: 프로그래머스_가장먼노드 (0) | 2020.06.03 |
알고리즘86 :: 프로그래머스_불량사용자 (0) | 2020.05.04 |
알고리즘85 :: 프로그래머스_수들의합 (0) | 2020.04.25 |
알고리즘84 :: 프로그래머스_단어변환 (0) | 2020.04.24 |
댓글
이 글 공유하기
다른 글
-
알고리즘89 :: SWEA_스도쿠검증
알고리즘89 :: SWEA_스도쿠검증
2020.07.23 -
알고리즘 88 :: 프로그래머스_가장먼노드
알고리즘 88 :: 프로그래머스_가장먼노드
2020.06.03 -
알고리즘86 :: 프로그래머스_불량사용자
알고리즘86 :: 프로그래머스_불량사용자
2020.05.04 -
알고리즘85 :: 프로그래머스_수들의합
알고리즘85 :: 프로그래머스_수들의합
2020.04.25