ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
์ง๋๋ ์ฝ๋์์๋ ๋ถ์ธ์ถ์ ๊ฐ์ ์กฐ์ํ์ ๋ผ์ด๋ธ ๋์์์ DVD๋ก ๋ง๋ค์ด ํ๋งคํ๋ ค ํ๋ค. DVD์๋ ์ด N๊ฐ์ ๊ณก์ด ๋ค์ด๊ฐ๋๋ฐ, DVD์ ๋ นํํ ๋์๋ ๋ผ์ด๋ธ์์์ ์์๊ฐ ๊ทธ๋๋ก ์ ์ง ๋์ด์ผ ํ๋ค. ์์๊ฐ ๋ฐ๋๋ ๊ฒ์ ์ฐ๋ฆฌ์ ๊ฐ์ ์กฐ์ํ์จ๊ฐ ๋งค์ฐ ์ซ์ดํ๋ค. ์ฆ, 1๋ฒ ๋ ธ๋์ 5๋ฒ ๋ ธ๋๋ฅผ ๊ฐ์ DVD์ ๋ นํํ๊ธฐ ์ํด์๋ 1๋ฒ๊ณผ 5๋ฒ ์ฌ์ด์ ๋ชจ๋ ๋ ธ๋๋ ๊ฐ์ DVD์ ๋ นํํด์ผ ํ๋ค. ๋ํ ํ ๋ ธ๋๋ฅผ ์ชผ๊ฐ์ ๋ ๊ฐ์ DVD์ ๋ นํํ๋ฉด ์๋๋ค.
์ง๋๋ ์ฝ๋ ์ ์ฅ์์๋ ์ด DVD๊ฐ ํ๋ฆด ๊ฒ์ธ์ง ํ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด ์ฌ์ ์ ๋ญ๋น๋๋ DVD๋ฅผ ๊ฐ๊ธ์ ์ค์ด๋ ค๊ณ ํ๋ค. ๊ณ ๋ฏผ ๋์ ์ง๋๋ ์ฝ๋๋ M๊ฐ์ DVD์ ๋ชจ๋ ๋์์์ ๋ นํํ๊ธฐ ๋ก ํ์๋ค. ์ด ๋ DVD์ ํฌ๊ธฐ(๋ นํ ๊ฐ๋ฅํ ๊ธธ์ด)๋ฅผ ์ต์๋ก ํ๋ ค๊ณ ํ๋ค. ๊ทธ๋ฆฌ๊ณ M๊ฐ์ DVD๋ ๋ชจ๋ ๊ฐ์ ํฌ๊ธฐ์ฌ์ผ ์ ์กฐ์๊ฐ๊ฐ ์ ๊ฒ ๋ค๊ธฐ ๋๋ฌธ์ ๊ผญ ๊ฐ์ ํฌ๊ธฐ๋ก ํด์ผ ํ๋ค.
๋ฌธ์ ํ์ด
- DVD์ ์ต์ ์ ์ฅ๋์ด์ผ ํ ๋ฐ์ดํฐ(lt)์ ์ต๋ ์ ์ฅ๋ ์ ์๋ ๋ฐ์ดํฐ(rt)๋ฅผ ๊ตฌํ๋ค.
- ๊ตฌํ lt์ rt์ ์ค๊ฐ๊ฐ์ด mid ๊ฐ์ ์ฐ์ถํ์ฌ ์ด๋ถํ์์ ํ๋ค.
- mid๊ฐ, ํ DVD์ ์ฉ๋์ ๊ฐ์ง๊ณ ๋ฆฌ์คํธ ๋ด์ ์ชผ๊ฐค ์ ์๋ ๊ฒฝ์ฐ์ ์๊ฐ M๊ฐ ์ดํ์ผ ๊ฒฝ์ฐ์๋ ์ ๋ต ์ฒ๋ฆฌ ๋ฐ rt๋ฅผ mid - 1๋ก ์ด๊ธฐํ
- M๊ฐ๋ฅผ ๋์ด์ ์ชผ๊ฐ๋ ๊ฒฝ์ฐ๋ ๋ฌธ์ ์์ ์๊ตฌํ DVD์ ์ด ๊ฐฏ์๋ฅผ ๋์ด์๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ด์ฆ ์ฉ๋์ ํ์ฌ ๊ธฐ์ค๋ณด๋ค ์ฌ๋ฆฌ๊ธฐ ์ํด lt๋ฅผ mid + 1๋ก ์ด๊ธฐํ
mid์์์ ์ฉ๋์์ M๊ฐ ์ดํ๋ก ์ชผ๊ฐค ์ ์๋ค๋ ๊ฒ์ ๊ทธ ์ด์์ ์ฉ๋์์๋ ๋น์ฐํ M๊ฐ ์ดํ์์ ์ชผ๊ฐค ์ ์๊ธฐ ๋๋ฌธ์ ์ค๋ฅธ์ชฝ ๊ตฌ๊ฐ์์๋ตํ๋ค.
๋ํ ํ์ฌ ๋ฌธ์ ์์๋ ์ต์ํ์ ์ฉ๋์ผ๋ก ํด๋น ๋ฆฌ์คํธ์ ๋ ธ๋๋ค์ ๋ชจ๋ ์ ์ฌํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ด๋ถํ์์ ํตํด ๊ฐ๋ฅํ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ต์ํ์ DVD ์ฉ๋์ ์ฐพ์์ผ ํ๋ค.
์ฝ๋
function solution(num, list) {
let answer = 0;
let lt = list[list.length - 1];
let rt = list.reduce((a, b) => { return a + b});
while(lt <= rt) {
let mid = Math.floor((lt + rt) / 2);
let target = [];
let tmpArr = [];
let sum = 0;
for(let x of list) {
sum += x;
if(sum <= mid) tmpArr.push(x)
else {
sum = x;
target.push(tmpArr);
tmpArr = [];
tmpArr.push(x);
}
if(x === list[list.length - 1]) target.push(tmpArr);
}
if(target.length <= num) {
answer = mid;
rt = mid - 1;
} else {
lt = mid + 1;
}
}
return answer;
}
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
console.log(solution(3, arr));
function count(songs, capacity) {
let cnt = 1;
let sum = 0;
for(let x of songs) {
if(sum + x > capacity) {
sum = x;
cnt++;
}
else sum+=x;
}
return cnt;
}
function solution(m, songs) {
let answer = 0;
let lt = Math.max(...songs);
let rt = songs.reduce((a, b) => a + b, 0);
while(lt <= rt) {
let mid = parseInt((lt + rt) / 2);
if(count(songs, mid) <= m) {
answer = mid;
rt = mid - 1;
}
else {
lt = mid + 1;
}
}
return answer;
}
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
console.log(solution(3, arr));
'์๊ณ ๋ฆฌ์ฆ > ํ๊ทธ ๋ณ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DFS]์ด์งํธ๋ฆฌ ์ํ (0) | 2021.07.28 |
---|---|
[์ฌ๊ทํจ์์ ์คํ ํ๋ ์]์ด์ง์ ์ถ๋ ฅ (0) | 2021.07.27 |
์ด๋ถํ์ (0) | 2021.07.25 |
[๊ทธ๋ฆฌ๋]๊ฒฐํผ์ (0) | 2021.07.24 |
[๊ทธ๋ฆฌ๋]ํ์์ค ๋ฐฐ์ (0) | 2021.07.23 |