<Algorithm> 173. 나무자르기(BJO)
by BFine반응형
1. 2805번 나무자르기(BJO)
사용 알고리즘 : 이분탐색
-
기준 설정까지는 괜찮았는데 답을 구하는 측면에서 나무 자른게 딱 떨어지지 않을때에 대한 처리가 미흡했다.
수학적으로 잘못접근해서 조금 오래걸렸다. 루프가 끝날때의 start인덱스를 출력했는데 그렇게 하면 결과조건을 충족하지 못했다.
최대의 높이니까 결과조건에 해당될때는 저장하고 그것을 출력하는 부분이 필요했다.
문제에 대한 접근&생각
- 정답의 크기(나무높이)가 20000000 넘어감 -> 이분탐색!
- 이분탐색으로 가장 최대의 높이를 찾아야함 -> 결과조건! (루프가 끝나는 순간이 아닌 최대에 도달한 값을 저장해야함)
내 코드
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 | import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); int arr[] = new int[n]; int max = 0; /**************************** * 높이를 기준으로 이분탐색을 하여 * 될수있는 경우 중 가장 최대 높이를 * 구하여 출력한다. ****************************/ for(int i = 0; i < n ; i++) { arr[i] = sc.nextInt(); max = Math.max(max, arr[i]); } int start = 0; int end = max; int ans = 0; while(start<end) { int mid = (start+end)/2; long total = 0; for(int i = 0; i < n; i++) { total+= arr[i]-mid>0?arr[i]-mid:0; } if(total > m) { ans = mid; start = mid+1; }else if(total < m){ end = mid; }else { ans = mid; break; } } System.out.println(ans); } } | cs |
반응형
'공부(2018~2019) - 스킨변경전 > Algorithm' 카테고리의 다른 글
<Algorithm> 175. 중량제한(BJO) (0) | 2019.04.20 |
---|---|
<Algorithm> 174. 랜선자르기(BJO) (0) | 2019.04.20 |
<Algorithm> 172. 방문길이(Programmers) (0) | 2019.04.19 |
<Algorithm> 171. 기지국설치(Programmers) (0) | 2019.04.19 |
<Algorithm> 170. 단속카메라(Programmers) (0) | 2019.04.18 |
블로그의 정보
57개월 BackEnd
BFine