-
[프로그래머스] 징검다리 건너기 (08.19)algorithm/프로그래머스 2020. 8. 19. 22:02
문제
https://programmers.co.kr/learn/courses/30/lessons/64062
접근법
효율성 문제였기 때문에 이분탐색으로 풀 생각 먼저 했다.
배열의 가장 작은 값과 가장 큰 값을 구하고
그 사이의 값을 이분탐색하면서 답이 될 수 있는 값 중에 가장 큰 값을 찾았다.
코드
class Solution { public int solution(int[] stones, int k) { int answer = 0; int min = getMin(stones); int max = getMax(stones); while(min <= max){ int mid = (min+max) / 2; if(isPossible(stones, mid, k)) { answer = Math.max(mid, answer); min = mid+1; }else{ max = mid-1; } } return answer; } private boolean isPossible(int[] stones, int mid, int k) { int cnt = 0; for(int stone : stones){ if(stone >= mid){ cnt = 0; //건널 수 없으면 카운트 }else{ cnt++; } //건널 수 없는 돌의 연속된 개수가 k와 같아지면 불가능 if(cnt==k) { return false; } } return true; } private int getMin(int[] stones) { int min = Integer.MAX_VALUE; for(int stone : stones) min = Math.min(stone, min); return min; } private int getMax(int[] stones) { int max = Integer.MIN_VALUE; for(int stone : stones) max = Math.max(stone, max); return max; } }
'algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 보석 쇼핑(08.22) (0) 2020.08.22 [프로그래머스] N-Queen (08.21) (0) 2020.08.21 [프로그래머스] 하노이의 탑 (08.09) (0) 2020.08.09 [프로그래머스] 최고의 집합 (08.07) (0) 2020.08.07 [프로그래머스] 줄 서는 방법 (08.06) (0) 2020.08.06