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

Daehyunii's Dev-blog

์กธ์—… ์„ ๋ฌผ(์™„์ „ ํƒ์ƒ‰) ๋ณธ๋ฌธ

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

์กธ์—… ์„ ๋ฌผ(์™„์ „ ํƒ์ƒ‰)

Daehyunii 2022. 8. 31. 23:53

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

 

์„ ์ƒ๋‹˜์€ ์˜ฌํ•ด ์กธ์—…ํ•˜๋Š” ๋ฐ˜ ํ•™์ƒ๋“ค์—๊ฒŒ ์กธ์—…์„ ๋ฌผ์„ ์ฃผ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.ํ•™์ƒ๋“ค์—๊ฒŒ ์ธํ„ฐ๋„ท ์‡ผํ•‘๋ชฐ์—์„œ ๊ฐ์ž ์›ํ•˜๋Š” ์ƒํ’ˆ์„ ๊ณจ๋ผ ๊ทธ ์ƒํ’ˆ์˜ ๊ฐ€๊ฒฉ๊ณผ ๋ฐฐ์†ก๋น„๋ฅผ ์ œ์ถœํ•˜๋ผ ๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. ์„ ์ƒ๋‹˜์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์˜ˆ์‚ฐ์€ ํ•œ์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.ํ˜„์žฌ ์˜ˆ์‚ฐ์œผ๋กœ ์ตœ๋Œ€ ๋ช‡ ๋ช…์˜ ํ•™์ƒ์—๊ฒŒ ์„ ๋ฌผ์„ ์‚ฌ์ค„ ์ˆ˜ ์žˆ๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์„ธ์š”. ์„ ์ƒ๋‹˜์€ ์ƒํ’ˆ ํ•˜๋‚˜๋ฅผ 50% ํ• ์ธํ•ด์„œ(๋ฐ˜ ๊ฐ€๊ฒฉ) ์‚ด ์ˆ˜ ์žˆ๋Š” ์ฟ ํฐ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐ์†ก๋น„๋Š” ํ• ์ธ์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

โ–ฃ ์ž…๋ ฅ์„ค๋ช…
์ฒซ ๋ฒˆ์งธ ์ค„์— ๋ฐ˜ ํ•™์ƒ์ˆ˜ N(1<=N<=1000)๊ณผ ์˜ˆ์‚ฐ M(1<=M<=100,000,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ N์ค„์— ๊ฑธ์ณ ๊ฐ ํ•™์ƒ๋“ค์ด ๋ฐ›๊ณ  ์‹ถ์€ ์ƒํ’ˆ์˜ ๊ฐ€๊ฒฉ๊ณผ ๋ฐฐ์†ก๋น„๊ฐ€ ์ž…๋ ฅ๋ฉ๋‹ˆ๋‹ค. ์ƒํ’ˆ๊ฐ€๊ฒฉ๊ณผ ๋ฐฐ์†ก๋น„๋Š” ๊ฐ๊ฐ 100,000์„ ๋„˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ƒํ’ˆ๊ฐ€๊ฒฉ์€ ์ง์ˆ˜๋กœ๋งŒ ์ž…๋ ฅ๋ฉ๋‹ˆ๋‹ค.

โ–ฃ ์ถœ๋ ฅ์„ค๋ช…
์ฒซ ๋ฒˆ์งธ ์ค„์— ์„ ์ƒ๋‹˜์ด ํ˜„์žฌ ์˜ˆ์‚ฐ์œผ๋กœ ์„ ๋ฌผํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ํ•™์ƒ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์„ ์ƒ๋‹˜ ์ตœ์†Œํ•œ 1๊ฐœ ์ด์ƒ์˜ ์ƒํ’ˆ์„ ์‚ด ์ˆ˜ ์žˆ๋Š” ์˜ˆ์‚ฐ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

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

5 28
6 6
2 2

4 3

4 5

10 3

 

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

4

 

์ถœ๋ ฅ์„ค๋ช…
(2, 2), (4, 3), (4, 5)์™€ (10, 3)๋ฅผ ํ• ์ธ๋ฐ›์•„ (5, 3)์— ์‚ฌ๋ฉด ๋น„์šฉ์ด 4+7+9+8=28์ž…๋‹ˆ๋‹ค.

Tip

 

 

๋ฌธ์ œํ’€์ด

// ๊ฐ•์˜ ๋“ฃ๊ณ  ๋‚ด๊ฐ€ ๋‹ค์‹œ ์ž‘์„ฑํ•œ ๋‹ต
function solution(total, products){
    let result = 0;
    let students = products.length;
    products.sort((a, b) => (a[0] + a[1]) - (b[0] + b[1]));

    for(let i = 0 ; i < students ; i++){
        let restMoney = total - (products[i][0] / 2 + products[i][1]);
        let count = 1;

        for(let j = 0 ; j < students ; j++){
            if(j !== i && products[j][0] + products[j][1] > restMoney) break;
            if(j !== i && products[j][0] + products[j][1] <= restMoney){
                restMoney -= products[j][0] + products[j][1];
                count++;
            }
        }
        // result = Math.max(result, count);
        if(result < count) result = count;
    }
    return result;
}

let arr2=[[6, 6], [2, 2], [4, 3], [4, 5], [10, 3]];
console.log(solution(28, arr2));