> 문제
2019 카카오 겨울 인턴십 문제
문제 : [징검다리 건너기]
> 문제풀이
스톤배열을 활용하여
중복제거
및오름차순 정렬
한 배열을 만들어주었습니다.스톤 크기의 차이가 클 수록 효율적인 작업을 수행할 수 있도록 해주었습니다.
작업된 이 배열을 활용하여 이분탐색을 수행하였습니다.
소스는 다음과 같습니다.
import java.util.*;
class Solution {
static int[] setting(int[] stones) {
Set<Integer> set = new TreeSet<>(); // 중복제거 및 오름차순 정렬을 위해 TreeSet 사용.
for(int i=0; i<stones.length; i++) {
set.add(stones[i]);
}
int[] res = new int[set.size()];
Iterator<Integer> it = set.iterator();
int index = 0;
while(it.hasNext()) {
res[index++] = it.next();
}
return res;
}
static public int solution(int[] stones, int k) {
int[] arr = setting(stones);
int left = 0, right = arr.length-1;
while(left < right){ // 중복제거 및 정렬된 스톤배열을 활용하여 이분탐색 수행.
int mid = (left + right)/2;
if(check(stones, k, arr[mid])){
left = mid + 1;
}else {
right = mid;
}
}
return left>0 ? arr[left-1] : arr[0];
}
static boolean check(int[] stones, int k, int n){
int cnt = 0;
for(int i=0; i<stones.length; i++){
if(stones[i]-n < 0) cnt++;
else cnt = 0;
if(cnt == k) return false;
}
return true;
}
}
문제 출처 : Programmers
PREVIOUS[프로그래머스] Level3 - 숫자 게임