๐ฉ๐ปโ๐ป๋ฌธ์ ๋งํฌ
[์ธํ๋ฐ ์น์
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;