๋ฌธ์
ํ์ด ๊ณผ์
ํ๋ฌผ๋ค์ ๋ฌด๊ฒ weights
๊ฐ ์ฃผ์ด์ง ๋ D
์ผ์ ๋ชจ๋ ํ๋ฌผ์ ๋ฐฐ์กํ๊ธฐ ์ํ ํ๋ฌผ์ ์ ์ต์ ๋ฌด๊ฒ๋ฅผ ์ฐพ๋ ๋ฌธ์ ์
๋๋ค.
์ฌ์ค ๋ฌธ์ ๋ถ๋ฅ๋ ์ด๋ถ ํ์
์ผ๋ก ๋์ด ์์ง๋ง ์
๋ ฅ์ ํฌ๊ธฐ๋ฅผ ๊ณ ๋ ค ํ์ ๋ ์์ ํ์
์ผ๋ก๋ ํด๊ฒฐํ ์ ์์ ๊ฒ ๊ฐ์์ต๋๋ค.
๊ทธ๋๋ ์ด๋ถ ํ์
์ ํ์ฉํด๋ณด๋ฉด ํ๋ฌผ์ ์ ์ต์ ๋ฐ ์ต๋ ๋ฌด๊ฒ๋ฅผ ์ ํ๊ณ
๋ชจ๋ ํ๋ฌผ์ ์ด๋ฐํ๊ธฐ ์ํด ํ์ํ ์ต์ ์ผ์๋ฅผ ๊ตฌํด์ ๋น๊ตํ๋ฉด ๋ฉ๋๋ค.
ํ๋ฌผ์ ์ ์ต์ ๋ฌด๊ฒ๋ ๋ชจ๋ ํ๋ฌผ ์ค ๊ฐ์ฅ ๋ฌด๊ฑฐ์ด ๊ฒ์ด๋ฉฐ
์ต๋ ๋ฌด๊ฒ๋ ๋ชจ๋ ํ๋ฌผ์ ํ๋ฃจ๋ง์ ๋ฐฐ์กํ๊ธฐ ์ํ ๋ฌด๊ฒ(์ฆ, ๋ชจ๋ ํ๋ฌผ ๋ฌด๊ฒ์ ํฉ) ์
๋๋ค.
์ฝ๋
/**
* @param {number[]} weights
* @param {number} D
* @return {number}
*/
var shipWithinDays = function (weights, D) {
let lo = Math.max(...weights);
let hi = weights.reduce((acc, weight) => acc + weight);
let answer = -1;
while (lo <= hi) {
const mid = parseInt((lo + hi) / 2);
const day = getShippingDay(weights, mid);
if (day <= D) {
answer = mid;
hi = mid - 1;
} else {
lo = mid + 1;
}
}
return answer;
};
function getShippingDay(weights, capacity) {
let day = 1;
let acc = 0;
for (const weight of weights) {
if (acc + weight <= capacity) acc += weight;
else {
acc = weight;
day++;
}
}
return day;
}
๋ฐ์ํ
'๐ algorithm > leetcode' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
LeetCode 112 - Path Sum (Easy) (0) | 2021.03.04 |
---|---|
LeetCode 63 - Unique Paths II (Medium) (0) | 2021.03.04 |
LeetCode 881 - Boats to Save People (Medium) (0) | 2021.03.04 |
LeetCode 234 - Palindrome Linked List (Easy) (0) | 2021.03.04 |
LeetCode 309 - Best Time to Buy and Sell Stock with Cooldown (Medium) (0) | 2021.03.04 |
๐ฌ ๋๊ธ