728x90
이해가 안되는거 주석으로 써놓음 아직도 이해안감
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 38 39 40 41 42 43 44 45 46 47 48 49 50 | public int solutionFin(int distance, int[] rocks, int n) { int answer = 0; Arrays.sort(rocks); // for(int i : rocks){ // System.out.println(i); // } // System.out.println(); int cnt, current; int left = 0, right = distance, mid = 0; while (left <= right) { int min = distance; cnt = 0; mid = (left + right) / 2; current = 0; for (int i = 0; i < rocks.length; i++) { if (rocks[i] - current < mid) cnt++; else { min = Math.min(min, rocks[i] - current); current = rocks[i]; } } if (distance - current < mid) cnt++; // System.out.println(left+" "+mid+" "+right); // System.out.println(cnt); // System.out.println(min); if (cnt > n) { right = mid - 1; } // 정말 이해가 안가는 부분인데 cnt==n말고 cnt<n인 부분 또한 answer를 정의할 수 있는 것이 가능하다는 건 이해가 안간다.. else { // 이걸 이렇게 박는 것으로 봐서는 이분탐색 탈출 후 최종 mid값이 문제에서 요구하는 최적해가 아니라는 소리가 아닌가 싶다..참 헷갈린다 answer = Math.max(answer, mid); left = mid + 1; } // System.out.println(answer); // System.out.println(); // if(cnt==n) answer = Math.max(answer,min); } return answer; } | cs |
'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 전화번호 목록 (해시) (0) | 2019.11.30 |
---|---|
프로그래머스 - 완주하지 못한 선수 (해시) (0) | 2019.11.30 |
프로그래머스 - 입국심사 (이분탐색) (0) | 2019.11.29 |
프로그래머스 - 하노이의 탑 (재귀함수) (0) | 2019.11.28 |
프로그래머스 - 최고의 집합 (규칙찾기) (0) | 2019.11.28 |