ํ์ ๋ฒ์๋ฅผ ๋ ๋ถ๋ถ์ผ๋ก ๋ถํ ํ๋ฉด์ ์ฐพ๋ ๋ฐฉ์
์ฒ์๋ถํฐ ๋๊น์ง ๋๋ฉด์ ํ์ํ๋ ๊ฒ๋ณด๋ค ํจ~~~์ฌ ๋น ๋ฅธ ์ฅ์ ์ ์ง๋
* ์๊ฐ๋ณต์ก๋
์ ์ฒด ํ์ : O(N)
์ด๋ถ ํ์ : O(logN)
- ์ฐ์ ์ ๋ ฌ์ ํด์ผ ํจ
- left์ right๋ก mid ๊ฐ ์ค์
- mid์ ๋ด๊ฐ ๊ตฌํ๊ณ ์ ํ๋ ๊ฐ๊ณผ ๋น๊ต
- ๊ตฌํ ๊ฐ์ด mid๋ณด๋ค ๋์ผ๋ฉด : left = mid+1 ๊ตฌํ ๊ฐ์ด mid๋ณด๋ค ๋ฎ์ผ๋ฉด : right = mid - 1
- left > right๊ฐ ๋ ๋๊น์ง ๊ณ์ ๋ฐ๋ณตํ๊ธฐ
public static int solution(int[] arr, int M) { // arr ๋ฐฐ์ด์์ M์ ์ฐพ์
Arrays.sort(arr); // ์ ๋ ฌ
int start = 0; // ์์
int end = arr[arr.length-1]; // ๋
while(start <= end) {
int sum = 0;
int mid = (start+end)/2; // ์์๊ณผ ๋์ ์ค๊ฐ๊ฐ
for (int i = 0; i < arr.length; i++) {
if(arr[i] > mid)
sum+=mid;
else
sum+=arr[i];
}
if(sum > M)
end = mid - 1;
else
start = mid + 1;
}
return end;
}