๐ก IDEA : ์ ๋ ฌ๋์ด์๋ ๋ฐฐ์ด์ด๋ฏ๋ก ์ด๋ถํ์์ ํตํด ํ์ ์๋๋ฅผ ๋์ธ๋ค. ์ด๋, ์์๋์ ๋ํด์๋ ์ ๋ ฌ์ด ๋์ด์์์ผ๋ก ๋ค์ ๋ฐฐ์ด ํ์์ ์ ๋ฐฐ์ด ํ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ์ผ๋ก ๋ฒ์๋ฅผ ์ขํ์ ํ์ํ ์ ์๋ค.
IDEA ์ค๋ช
class Solution {
public int countNegatives(int[][] grid) {
int answer = 0;
int m = grid.length; // ์ธ๋ก ๊ธธ์ด
int n = grid[0].length; // ๊ฐ๋ก ๊ธธ์ด
int left = 0;
int right = n-1;
int idx = n;
int mid = 0;
for (int i=0; i<m; i++) {
if (idx == 0){
answer += (m-i)*n;
break;
}
left = 0;
right = idx-1;
// ์ด๋ถ ํ์ ์ํ
while (left <= right) {
mid = (left + right) / 2;
if (grid[i][mid] < 0) {
right = mid - 1;
idx = Math.min(idx, mid);
}
else {
left = mid + 1;
}
}
answer += (n-idx);
}
return answer;
}
}
๐ก IDEA : ์ ์๋ ๋ ์์ ์ง์ ์ฎ๊ธธ ์ ์๋์ง๋ ์์ ํ์์ ํตํด ์ ์ ์๋ค. ๋ค๋ง ๋ฌด๊ฒ ์ ํ์ ์ด๋ถ ํ์์ ํตํด์ ์๋๋ฅผ ๊ฐ์ ํ ์ ์๋ค.
class Solution {
public int shipWithinDays(int[] weights, int days) {
// (1) ํ์ํ ๋ฌด๊ฒ์ ๋ฒ์๋ฅผ ๊ฒฐ์
int sum = 0;
int max = 0;
for (int weight : weights) {
sum += weight;
max = Math.max(max, weight);
}
// (2) ์ด๋ถ ํ์ ์ํ
int left = max;
int right = sum;
int minDay = sum+1;
while (left <= right) {
int mid = (left + right) / 2;
if (isPossible(weights, days, mid)) {
// LowerBound ๊ฐ๋
์ ํตํด ์ต์๊ฐ์ ํ์
minDay = Math.min(mid, minDay);
right = mid-1;
}
else {
left = mid+1;
}
}
return minDay;
}
/*
int[] weights : ์ฃผ์ด์ง ๋ฌด๊ฒ ๋ฐฐ์ด
int days : ์ฃผ์ด์ง ๋ ์ง ์ ํ
int limit : ํ์ ์ค์ธ ๋ฌด๊ฒ ์ ํ
*/
public static boolean isPossible (int[] weights, int days, int limit) {
int sum = 0;
int cnt = 1;
// ์ ์๋ limit ๋ฌด๊ฒ์ ๋ํด์ ๋ชจ๋ ์ง์ ์ฎ๊ธฐ๋ ค๋ฉด ์ผ๋ง๋ ๊ฑธ๋ฆฌ๋์ง ํ์ธ
for (int i=0; i<weights.length; i++) {
if (sum + weights[i] <= limit) {
sum += weights[i];
continue;
}
else {
sum = weights[i];
cnt++;
}
}
// ์ ํ๋ ๋ ์ง ์์ ๋๋๋ฉด true ๋ฅผ ๋ฐํ
return cnt <= days;
}
}