๊ด€๋ฆฌ ๋ฉ”๋‰ด

Daehyunii's Dev-blog

๋ฎค์ง๋น„๋””์˜ค(๊ฒฐ์ •์•Œ๊ณ ๋ฆฌ์ฆ˜) ๋ณธ๋ฌธ

๐Ÿ“š Language & CS knowledge/Algorithm (๊ธฐ์ดˆ๋ฌธ์ œํ’€์ด)

๋ฎค์ง๋น„๋””์˜ค(๊ฒฐ์ •์•Œ๊ณ ๋ฆฌ์ฆ˜)

Daehyunii 2022. 9. 6. 19:03

๋ฌธ์ œ(์ถœ์ฒ˜ : ์ธํ”„๋Ÿฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด ๊ฐ•์˜, ์ •๋ณด์˜ฌ๋ฆผํ”ผ์•„๋“œ)

 

์ง€๋‹ˆ๋ ˆ์ฝ”๋“œ์—์„œ๋Š” ๋ถˆ์„ธ์ถœ์˜ ๊ฐ€์ˆ˜ ์กฐ์˜ํ•„์˜ ๋ผ์ด๋ธŒ ๋™์˜์ƒ์„ DVD๋กœ ๋งŒ๋“ค์–ด ํŒ๋งคํ•˜๋ ค ํ•œ๋‹ค. DVD์—๋Š” ์ด N๊ฐœ์˜ ๊ณก์ด ๋“ค์–ด๊ฐ€๋Š”๋ฐ, DVD์— ๋…นํ™”ํ•  ๋•Œ์—๋Š” ๋ผ์ด๋ธŒ์—์„œ์˜ ์ˆœ์„œ๊ฐ€ ๊ทธ๋Œ€๋กœ ์œ ์ง€ ๋˜์–ด์•ผ ํ•œ๋‹ค. ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ๋Š” ๊ฒƒ์„ ์šฐ๋ฆฌ์˜ ๊ฐ€์ˆ˜ ์กฐ์˜ํ•„์”จ๊ฐ€ ๋งค์šฐ ์‹ซ์–ดํ•œ๋‹ค. ์ฆ‰, 1๋ฒˆ ๋…ธ๋ž˜์™€ 5๋ฒˆ ๋…ธ๋ž˜๋ฅผ ๊ฐ™์€ DVD์— ๋…นํ™”ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” 1๋ฒˆ๊ณผ 5๋ฒˆ ์‚ฌ์ด์˜ ๋ชจ๋“  ๋…ธ๋ž˜๋„ ๊ฐ™์€ DVD์— ๋…นํ™”ํ•ด์•ผ ํ•œ๋‹ค. ๋˜ํ•œ ํ•œ ๋…ธ๋ž˜๋ฅผ ์ชผ๊ฐœ์„œ ๋‘ ๊ฐœ์˜ DVD์— ๋…นํ™”ํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

์ง€๋‹ˆ๋ ˆ์ฝ”๋“œ ์ž…์žฅ์—์„œ๋Š” ์ด DVD๊ฐ€ ํŒ”๋ฆด ๊ฒƒ์ธ์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ด ์‚ฌ์—…์— ๋‚ญ๋น„๋˜๋Š” DVD๋ฅผ ๊ฐ€๊ธ‰์  ์ค„์ด๋ ค๊ณ  ํ•œ๋‹ค. ๊ณ ๋ฏผ ๋์— ์ง€๋‹ˆ๋ ˆ์ฝ”๋“œ๋Š” M๊ฐœ์˜ DVD์— ๋ชจ๋“  ๋™์˜์ƒ์„ ๋…นํ™”ํ•˜๊ธฐ ๋กœ ํ•˜์˜€๋‹ค. ์ด ๋•Œ DVD์˜ ํฌ๊ธฐ(๋…นํ™” ๊ฐ€๋Šฅํ•œ ๊ธธ์ด)๋ฅผ ์ตœ์†Œ๋กœ ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  M๊ฐœ์˜ DVD๋Š” ๋ชจ๋‘ ๊ฐ™์€ ํฌ๊ธฐ์—ฌ์•ผ ์ œ์กฐ์›๊ฐ€๊ฐ€ ์ ๊ฒŒ ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ๊ผญ ๊ฐ™์€ ํฌ๊ธฐ๋กœ ํ•ด์•ผ ํ•œ๋‹ค.

 

โ–ฃ ์ž…๋ ฅ์„ค๋ช…
์ฒซ์งธ ์ค„์— ์ž์—ฐ์ˆ˜ N(1≤N≤1,000), M(1≤M≤N)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ ์ค„์—๋Š” ์กฐ์˜ํ•„์ด ๋ผ์ด๋ธŒ์—์„œ ๋ถ€๋ฅธ ์ˆœ์„œ๋Œ€๋กœ ๋ถ€๋ฅธ ๊ณก์˜ ๊ธธ์ด๊ฐ€ ๋ถ„ ๋‹จ์œ„๋กœ(์ž์—ฐ์ˆ˜) ์ฃผ์–ด์ง„๋‹ค. ๋ถ€๋ฅธ ๊ณก์˜ ๊ธธ์ด๋Š” 10,000๋ถ„์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

 

โ–ฃ ์ถœ๋ ฅ์„ค๋ช…
์ฒซ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ DVD์˜ ์ตœ์†Œ ์šฉ๋Ÿ‰ ํฌ๊ธฐ๋ฅผ ์ถœ๋ ฅํ•˜์„ธ์š”.

 

โ–ฃ ์ž…๋ ฅ์˜ˆ์ œ 1
9 3

1 2 3 4 5 6 7 8 9

 

โ–ฃ ์ถœ๋ ฅ์˜ˆ์ œ 1

17

์„ค๋ช… : 3๊ฐœ์˜ DVD์šฉ๋Ÿ‰์ด 17๋ถ„์งœ๋ฆฌ์ด๋ฉด (1, 2, 3, 4, 5) (6, 7), (8, 9) ์ด๋ ‡๊ฒŒ 3๊ฐœ์˜ DVD๋กœ ๋…น์Œ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. 17๋ถ„ ์šฉ๋Ÿ‰๋ณด๋‹ค ์ž‘์€ ์šฉ๋Ÿ‰์œผ๋กœ๋Š” 3๊ฐœ์˜ DVD์— ๋ชจ๋“  ์˜์ƒ์„ ๋…นํ™”ํ•  ์ˆ˜ ์—†๋‹ค.

 

Tip

 

๋ฌธ์ œํ’€์ด

//์ •๋‹ต
function count(songs, capacity){
    let cnt=1, sum=0; // ์šฉ๋Ÿ‰์ด capacity์ธ dvd ํ•œ ์žฅ์€ ๋ฌด์กฐ๊ฑด ์žˆ๋Š”๊ฒƒ์ž„
    for(let x of songs){
        if(sum+x > capacity){ // ๋”ํ–ˆ์„๋•Œ ์šฉ๋Ÿ‰๋ณด๋‹ค ์ปค์ง€๋ฉด
            cnt++; // dvd์˜ ๊ฐœ์ˆ˜๊ฐ€ ํ•œ ์žฅ ๋Š˜์–ด๋‚˜๋Š”๊ฒƒ์ด๊ณ 
            sum=x; // ํ•ด๋‹น x๋Š” ์ƒˆ๋กœ์šด dvd์— ๋‹ด์•„์„œ ํ•ฉ๊ณ„์— ์ถ”๊ฐ€ํ•ด ์ฃผ๋Š”๊ฒƒ์ž„
        }
        else sum+=x; // ๊ทธ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋ฉด sum์— ๊ณ„์† ๋ˆ„์ 
    }
    return cnt;
}

function solution(m, songs){
    let answer;
    let lt=Math.max(...songs);
    let rt=songs.reduce((a, b)=>a+b, 0); // a์—๋‹ค๊ฐ€ b๊ฐ’์„ ๋ˆ„์ !(a์ดˆ๊ธฐ์„ค์ •์€ 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));