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

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

[Javascript/PGS] Lv.2 : ํผ์ฆ ๊ฒŒ์ž„ ์ฑŒ๋ฆฐ์ง€ (PCCP ๊ธฐ์ถœ๋ฌธ์ œ 2๋ฒˆ)

728x90
๋ฐ˜์‘ํ˜•

 

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

 

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

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

programmers.co.kr


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

์ •๋‹ต๋ฅ  42%์ธ PCCP ๊ธฐ์ถœ์ด๋‹ค

๋‹ค์Œ ๋‹ฌ์— PCCP ๋„์ „ํ•ด๋ณผ๊นŒ ํ•ด์„œ ๊ธฐ์ถœ์„ ํ’€์–ด๋ณด์•˜๋‹ค!

 

์ฒ˜์Œ์— limit ๋ฒ”์œ„๊ฐ€ ๋„ˆ๋ฌด ํฌ๊ธธ๋ž˜, ์ด๊ฑฐ ์„ค๋งˆ ์ด๋ถ„ํƒ์ƒ‰...?! ์ด๋Ÿฌ๋ฉด์„œ ํ’€์—ˆ๋Š”๋ฐ

์—ญ์‹œ๋‚˜ ์ด์ง„ ํƒ์ƒ‰ ์œ ํ˜•์˜ ๋ฌธ์ œ๊ฐ€ ๋งž์•˜๋‹ค.

์ž์ฃผ ํ‘ธ๋‹ˆ๊นŒ ์Šฌ์Šฌ ๋ฌธ์ œ ์œ ํ˜•์ด ๋ˆˆ์— ๋ณด์ด๋Š”๋“ฏ ๐Ÿ˜‡

 

while ์ข…๋ฃŒ ์กฐ๊ฑด, left / right ๊ฐฑ์‹ , answer ๊ฐฑ์‹  ๋“ฑ ์‹ ๊ฒฝ์จ์•ผํ•  ๋ถ€๋ถ„์ด ๋งŽ์•˜๋‹ค!!!

 

ํŠนํžˆ ๋‚œ์ด๋„, ์†Œ์š” ์‹œ๊ฐ„์€ ๋ชจ๋‘ ์–‘์˜ ์ •์ˆ˜๋ฉฐ, ์ˆ™๋ จ๋„๋„ ์–‘์˜ ์ •์ˆ˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.๋ผ๋Š” ์กฐ๊ฑด์ด ์žˆ์œผ๋ฏ€๋กœ,

์ตœ์†Ÿ๊ฐ’์ด 0์ด ์•„๋‹Œ 1๋ถ€ํ„ฐ ์‹œ์ž‘์ด์–ด์•ผ ํ•จ

 

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

function solution(diffs, times, limit) {
    let answer = 100001;
    let max = 0; let maxIdx = 0;
    let len = diffs.length;
    // ์ตœ๋Œ“๊ฐ’๊ณผ ์ธ๋ฑ์Šค ์ฐพ๊ธฐ
    diffs.forEach((d, i)=>{
        if(max<d) {
            maxIdx = i;
            max = d;
        }
    })
    // ์ธ๋ฑ์Šค ์ด์ง„ํƒ์ƒ‰
    let left = 1;
    let right = max;
    
    while(left <= right){
        let level = Math.floor((left+right)/2);
        let time = 0;
        // console.log(left, level, right);
        for(let i=0; i<len; ++i){
            if(diffs[i]<=level){
                time += times[i];
            }
            else{
                let wrong = diffs[i]-level;
                if(i==0) {
                    time += wrong * times[i] + times[i];
                }
                else time += wrong * (times[i]+times[i-1]) + times[i];
            }
        }
        // ์ œํ•œ์‹œ๊ฐ„๋ณด๋‹ค ๋” ์˜ค๋ž˜๊ฑธ๋ฆฌ๋ฉด -> ๋ ˆ๋ฒจ ๋†’์ด๊ธฐ
        if(time > limit){
            left = level+1;
        }
        else {
            answer = Math.min(answer, level);
            right = level-1;
        }
    }
    return answer;
}

728x90
๋ฐ˜์‘ํ˜•