문제 - 징검다리 건너기
한명 씩 디딤돌을 건너면서 건널 수 있는지 못하는 지 완전탐색느낌으로 찾으면 효율성테스트에서 안좋은 결과를 받을 거 같아서 다른 방법을 생각해보았다.
import java.util.*;
class Solution {
public int solution(int[] stones, int k) {
int answer = 0;
//최소한으로 건널 수 있는 사람 수
int left = 1;
//최대로 건널 수 있는 사람 수
int right = -1;
for(int stone : stones)
{
right = Math.max(stone,right);
}
while(left <= right)
{
//현재 건널 수 있는 사람의 수
int mid = (left+right)/2;
if(isCrossStones(mid,k,stones))
{
//해당 인원으로 건너기 가능
left = mid + 1;
answer = mid;
}else{
//해당 인원으로 건너기 불가능
right = mid - 1;
}
}
return answer;
}
private boolean isCrossStones(int friend, int k, int []stones){
//뛰어넘는 디딤돌들
int skip = 0;
for(int i = 0;i<stones.length;i++)
{
if(stones[i] - friend < 0)
{
skip++;
}
else
skip = 0;
if(skip >= k)
{
return false;
}
}
return true;
}
}