๐ฉ๐ปโ๐ป๋ฌธ์ ๋งํฌ
[์ธํ๋ฐ ์น์
7] ๋ฎค์ง๋น๋์ค (Javascript)
์ ๋ฃ ๊ฐ์์ธ ๊ด๊ณ๋ก ๋ฌธ์ ์ค๋ช
์ ์๋ตํฉ๋๋ค.
โ๏ธIdea Sketch
2021-06-27
1. ๋ฌธ์ ์ดํด
- ์์ ๊ทธ๋๋ก ์ ์ง
- DVD ์ฉ๋ ์ต์ํ
2. DVD ๊ฐ์์ ์๊ด์์ด DVD๊ฐ ๊ผญ ๋ด์์ผํ ์ฉ๋
- ์ต์์ฉ๋ : 9
- ์ต๋์ฉ๋ : 1+2+โฆ+9 = 45
3. ์ด๋ถ๊ฒ์ ๊ตฌํ
- left = 9, right = 45
- while (left <= right)
- left = mid+1; right = mid-1;
4. DVD์ฉ๋์ด mid์ผ ๋, DVD ๋ช ๊ฐ๊ฐ ํ์ํ์ง ํ์ธ
function count (mid, arr) {
let cnt = 1;
let sum = 0;
for (let i=arr.length-1; i>=0; i--) {
sum += arr[i];
if (sum > mid) {
cnt++;
sum = arr[i]
}
}
return cnt;
}
โ๏ธ์์ค์ฝ๋
2021-06-27
function count (mid, arr) {
let cnt = 1;
let sum = 0;
for (let i=arr.length-1; i>=0; i--) {
sum += arr[i];
if (sum > mid) {
cnt++;
sum = arr[i]
}
}
return cnt;
}
function solution(m, arr) {
let left = arr[arr.length - 1], right = 0;
for (let x of arr) right += x;
arr.sort((a, b) => a-b);
while (left <= right) {
let mid = Math.floor((right + left)/ 2);
let cnt = count(mid, arr);
if (cnt === m) return mid;
else if (cnt < m) right = mid-1; // ์ ์ฅ์ฉ๋์ด ํฌ๋ค
else if (cnt > m) left = mid+1; // ์ ์ฅ์ฉ๋์ด ๋ถ์กฑํ๋ค
}
}
โ๏ธ๋์น ๊ฒ 2๊ฐ์ง
1. arr.sort()ํ ํ์ ์๋ค
- let left = Math.max(โฆarr);
- let right = arr.reduce((a, b) => a+b, 0);
2. if (count(mid, arr) === m) return mid; ์์ ์๊ธฐ๋ ๋ฌธ์
- mid-1, mid-2, โฆ ์ ์ฉ๋์ผ๋ก๋ ๋ฌธ์ ์กฐ๊ฑด์ ๋ง์กฑํ ์ ์๋ค.
- ๋ฐ๋ผ์ if (count(mid, arr) === m) ์ผ ๋ ๋ฌด์กฐ๊ฑด ์ฐ์ฐ์ ์ข ๋ฃํ๋ฉด ์๋๋ค.
if (count(mid, arr) <= m) right = mid-1;