๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/Programmers

[Javascript/PGS] Lv.3 : ์ž…๊ตญ์‹ฌ์‚ฌ (์ด๋ถ„ํƒ์ƒ‰)

728x90
๋ฐ˜์‘ํ˜•

 

https://school.programmers.co.kr/learn/courses/30/lessons/43238

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

 


 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ ˆ๋ฒจ3 ๋ฌธ์ œ.

๋ฌธ์ œ๋ฅผ ๋ณด๊ณ  ์ด์ง„ํƒ์ƒ‰์œผ๋กœ ํ’€์–ด์•ผ๊ฒ ๋‹ค๋Š” ์•„์ด๋””์–ด๋ฅผ ๋– ์˜ฌ๋ฆฌ๊ธฐ ์–ด๋ ค์›€ ใ… ใ…กใ… 

 

์˜ค๋Š˜ ์ƒˆ๋กญ๊ฒŒ ๋ฐฐ์šด ๊ฒƒ

js ๋ฐฐ์—ด์—์„œ ์ตœ๋Œ“๊ฐ’ ์ฐพ๊ธฐ : Math.max(...times)

๋ฐฐ์—ด ์•ž์— ...์„ ๋ถ™์—ฌ์•ผ ํ•จ.

Math.max()๋Š” ๋ฐฐ์—ด์„ ์ง์ ‘ ๋ฐ›์„ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ „๊ฐœ ์—ฐ์‚ฐ์ž๊ฐ€ ํ•„์š”โ€ผ๏ธ

 

โš ๏ธ ์ฃผ์˜์  1.

์ด๋ถ„ํƒ์ƒ‰ ํ›„, ๋‹ต์ด ๋„์ถœ๋˜์—ˆ์ง€๋งŒ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ
right-left๊ฐ€ ์ถฉ๋ถ„ํžˆ ์ž‘์ง€ ์•Š๋‹ค๋ฉด ๋” ์ž‘์€ ์ˆ˜๋ฅผ ์ฐพ์•„ ํƒ์ƒ‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

(์˜ˆ์‹œ : left-20, mid-21, right-23 ์ธ ๊ฒฝ์šฐ์—์„œ ๋‹ต์ด 20๊ณผ 21 ๋ชจ๋‘ ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ์Œ -> ์ตœ์†Ÿ๊ฐ’์„ ์ฐพ์•„์•ผ ํ•จ!)

๋ฐ˜์˜ฌ๋ฆผ ๋ฌธ์ œ์ธ์ง€..

์ด๊ฑธ ๋†“์ณ์„œ ํ‹€๋ฆผ ใ… ใ… 

์งˆ๋ฌธ๊ฒŒ์‹œํŒ์˜ ์–ด๋Š ๊ท€์ธ ๋•๋ถ„์— ํ•ด๊ฒฐ!

 

โš ๏ธ ์ฃผ์˜์  2.

๋˜ ๊ณ ๋ คํ•ด์•ผ ํ•  ์ ์€, ํ…Œ์ผ€ ์ตœ๋Œ“๊ฐ’์ด ํฌ๊ธฐ ๋•Œ๋ฌธ์—

๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋ˆ„์ ํ•ฉ์„ ๊ตฌํ•  ๋•Œ -> int ๋ฒ”์œ„ํ˜•์„ ๋„˜์–ด๊ฐ€์ง€ ์•Š๋„๋ก, ์–ด๋Š ์„ ์—์„œ ์ค‘๋‹จ์‹œ์ผœ์•ผ ํ•œ๋‹ค.


๋‚˜์˜ ํ’€์ด

function solution(n, t) {
    let answer = 0;
    let managers = t.length;
    let times = t.map(Number);
    // (์‹œ๊ฐ„ / ์†Œ์š”์‹œ๊ฐ„) ์˜ ์ดํ•ฉ = ์‹ฌ์‚ฌ๊ฐ€๋Šฅํ•œ ์‚ฌ๋žŒ ์ˆ˜
    
    let left = 1; let right = Math.max(...times) * n;
    console.log(right)
    let mid = 0;
    let sumPeople = 0;
    while(left <= right){
        mid = Math.floor((left+right)/2);
        for(let i=0; i<managers; ++i){
            sumPeople += Math.floor(mid/times[i]);
            if(sumPeople>n) break;
        }
        if(n === sumPeople) {
            if(right-left <= 1) return mid;
            right = mid-1;
        }
        if(n <= sumPeople) {
            right = mid-1;
            answer = mid;
        }
        else left = mid + 1;
        sumPeople = 0;
    }
    return answer;
}

728x90
๋ฐ˜์‘ํ˜•