๐ section07 - 11 - ๋ฎค์ง๋น๋์ค(๊ฒฐ์ ์๊ณ ๋ฆฌ์ฆ)
์ด๋ถํ์ ์๊ณ ๋ฆฌ์ฆ์ ์์ฉํด์ ํธ๋ ๋ฌธ์ ๋ค. ๋ณดํต ์ด๋ถํ์์ ์ด์ฉํ ๋ฌธ์ ๋ ํ๋ผ๋ฉํธ๋ฆญ์์น(Parametric Search)
์๊ณ ๋ฆฌ์ฆ์ ๋ฐฉ๋ฒ์ผ๋ก ํ๊ฒ ๋๋๋ฐ, ์ด๋ ๊ฐ์ ์ต๋๊ฐ ํน์ ์ต์๊ฐ์ ๊ตฌํ์ฌ ๊ฒฐ์ ๋ฌธ์ ๋ก ๋ฐ๊พธ์ด ํ ์ ์๋ค. ๊ฒฐ์ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๊ฐ์ ๋ฌธ์ ๋ ํ์ ๋ฒ์๊ฐ ํฐ ์ํฉ์์์ ํ์์ ๊ฐ์ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ผ๋ฏ๋ก ํ์ ๋ฒ์๊ฐ 20,000,000(์ด์ฒ๋ง)
์ ๋์ด๊ฐ๋ฉด ์ด์ง ํ์์ผ๋ก ์ ๊ทผํด๋ณด์. ๋ฒ์๊ฐ 10,000,000(์ฒ๋ง)
์ด์์ผ๋ก ๋์ด๊ฐ๋ฉด ์ด์ง ํ์์ฒ๋ผ O(logN)
์ ์๋๋ฅผ ๋ด์ผ ํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ ์ฌ๋ ค์ผ ํ ์ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
ํ๋ผ๋ฉํธ๋ฆญ ์์น์ ์ฃผ์ ํน์ง์ ๋ฒ์ ๋ด์์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฐ์ด ์๋๋ผ๋ ๊ฑฐ๊ธฐ์ ๋๋๋ ๊ฒ์ด ์๋๋ผ ๊ทธ๊ฒ๋ณด๋ค ๋ ์ข์ ์ต์ ์ ๋ต์ด ์๋์ง ํ์ํ๋ค๋ ๊ฒ์ด๋ค. ๋ฏธ์ธํ ํ๐ก ์ ๋งํ์๋ฉด ์กฐ๊ฑด์ ํ๋ฐฑ๋
ผ๋ฆฌ(?)
๋ก ๋ ์ฌ๋ฆฌ๋ฉด ์ฝ๊ฒ ํ ์ ์๋ค. ์๋ฅผ ๋ค์ด ๋์ด๊ฐ ์
๋ ฅ๋ ๋ฐฐ์ด์ด ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด ์์ ๋ 19์ด
๋ณด๋ค ํฌ์ง๋ง 19์ด
๊ณผ ์ ์ผ ๊ฐ๊น์ด ์ฌ๋์ ์ฐพ๋๋ค๊ณ ๊ฐ์ ํด๋ณด์. ๋ค์ ์ฌ์ง์ฒ๋ผ ํ์ฌ mid
๊ฐ์ด target
๋ณด๋ค ์ผ์ชฝ์ ์์ผ๋ฉด mid
์ ์ข์ธก์ ๋ต์ด ๋ ์ ์๋ค๋ ๊ฒฐ๋ก ์ด ๋์จ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ mid
๋ฅผ ์ฐ์ธก์ผ๋ก ์ด๋ํ์ฌ ํ์์ ๊ณ์ํ๋ค ๋ณด๋ฉด ์ต์ ์ ๋ต์ ์ฐพ์ ์ ์๋ค.
![](https://images.velog.io/images/abcd8637/post/f17429c6-bd14-43c2-97ab-92ec7b9b234f/KakaoTalk_Photo_2021-09-14-12-20-59.jpeg)
์, ์ด์ ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์.
๋ฌธ์ : DVD
๋
นํ ์์๋ ์์๊ฐ ๊ทธ๋๋ก ์ ์ง๋์ด์ผ ํ๋ค. 1๋ฒ ๋
ธ๋์ 5๋ฒ ๋
ธ๋๋ฅผ ๊ฐ์ DVD
์ ๋
นํํ๊ธฐ ์ํด์๋ 1๋ฒ๊ณผ 5๋ฒ ์ฌ์ด์ ๋ชจ๋ ๋
ธ๋๋ ๊ฐ์ DVD์ ๋
นํ๋์ด์ผ ํ๋ค. ํ ๋
ธ๋๋ฅผ ์ชผ๊ฐ์ ๋ ๊ฐ์ DVD
๋ก ๋
นํํ ์ ์๋ค. M
๊ฐ์ DVD
์ ๋ชจ๋ ๋์์์ ๋
นํํ๊ธฐ๋ก ํ๋ค. DVD์ ํฌ๊ธฐ๋ฅผ ์ต์๋ก ํ๋ ค๊ณ ํ๋ค. M๊ฐ์ DVD๋ ๋ชจ๋ ๊ฐ์ ํฌ๊ธฐ์ฌ์ผ ์ ์กฐ์๊ฐ๊ฐ ์ ๊ฒ ๋ค๊ธฐ ๋๋ฌธ์ ๊ผญ ๊ฐ์ ํฌ๊ธฐ๋ก ํ์.
๋ฌธ์ ์ ์ค๋ช
์ด ์กฐ๊ธ ์ด๋ ค์ธ ์ ์์ง๋ง ๊ฒฐ๋ก ์ ์ผ๋ก M
๊ฐ์ DVD
์ ์์
์ ๋ชจ๋ ๊ฐ์ ํฌ๊ธฐ๋ก ๋ด์์ผ ํ๋๋ฐ, ๊ทธ ํฌ๊ธฐ๊ฐ ๊ฐ์ฅ ์ต์๊ฐ ๋๋ ๊ฐ์ ์ฐพ๋ ๋ฌธ์ ๋ค. ์ต์ ์ ๊ฐ์ ์ฐพ์์ผ ํ๊ธฐ ๋๋ฌธ์ ์ด๋ถ ํ์์ ์ด์ฉํ ํ๋ผ๋ฉํธ๋ฆญ ์์น
์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ฉด ๋๋ค. ์ฌ๊ธฐ์ lt
๋ ์ฃผ์ด์ง ๊ฐ์ ์ ์ผ ์์ ๊ฐ(1
) ํน์ ์ ์ผ ํฐ ๊ฐ(9
)์ ์ ์ธํ ์ ์๋๋ฐ, 1
์ ์ต์ ์ ๋ต๊ณผ ๊ทผ์ ํ์ง ์์ผ๋ฏ๋ก ์ ์ผ ํฐ ๊ฐ์ธ 9
๋ฅผ ์ฃผ์๋ค. rt
๋ arr
์ ๋ชจ๋ ๋ํ ๊ฐ์ ์คฌ๋๋ฐ, ์ด๋ ํ DVD
์ ์ ์ฅํ ์ ์๋ ์์
์ ํฌ๊ธฐ๋ฅผ ๋ชจ๋ ๋ํ ๊ฐ์ด๋ค. ํน์ ๋ถ๋ฅธ ๊ณก์ ๊ธธ์ด๊ฐ 10,000๋ถ ์ดํ์ด๋ฏ๋ก
์ต๋๋ก ๋์ฌ ์ ์๋ ๊ฐ์ธ n*10000
์ ์ค๋ ๋๋ค. ์ง๊ธ๊น์ง ์ฝ์ ๋ด์ฉ์ด ์ ์ดํด๊ฐ ๋์ง ์์ผ๋ฉด ๋ค์์ ํ์ด๊ณผ์ ์ ์ดํด๋ณด์.
![](https://images.velog.io/images/abcd8637/post/b71d48e8-6e4e-479b-a2e3-498e26d9c207/KakaoTalk_Photo_2021-09-11-10-08-03.jpeg)
let n = 9;
let m = 3;
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
console.log(solution(n, m, arr));
// let rt = n * 10_000;
function solution(n, m, arr){
let lt = Math.max(...arr);
let rt = 45;
let answer;
while (lt<=rt){
let mid = Math.floor((lt+rt)/2);
console.log(`lt=${lt}, rt=${rt}, mid=${mid}`)
let cnt=1;
let sum=0;
for (let x of arr){
if(sum+x>mid){
cnt++;
sum=x;
}else sum+=x;
}
if (cnt <= m) answer=mid, rt=mid-1;
else lt=mid+1;
}
console.log(answer)
}
๋๊ธ