๐Ÿ”’Algorithm

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค[JS] > [PCCP ๊ธฐ์ถœ๋ฌธ์ œ] 2๋ฒˆ / ํผ์ฆ ๊ฒŒ์ž„ ์ฑŒ๋ฆฐ์ง€

devWarrior 2024. 9. 11. 23:26

๐Ÿ”ฅ๋ฌธ์ œ๋งํฌ

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

 

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

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

๐Ÿ”ฅํ’€์ด

์ œํ•œ์‚ฌํ•ญ์„ ๋ณด๋ฉด์„œ ๋ฐ”๋กœ ์ด์ง„ํƒ์ƒ‰์œผ๋กœ ์ ‘๊ทผํ•˜๋ผ๋Š” ๋ƒ„์ƒˆ๋ฅผ ๋งก์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ด์ง„ํƒ์ƒ‰์œผ๋กœ ์ ‘๊ทผ ์•ˆํ•œ๋‹ค๋ฉด ๊ดด๋ž„ํ• ๋งŒํผ์˜ ์—ฐ์‚ฐ ํšŸ์ˆ˜๊ฐ€ ํ•„์š”ํ•˜๊ณ  ๊ทธ๋Ÿผ ๋ถ„๋ช…ํžˆ ์‹œ๊ฐ„์ดˆ๊ณผ ์ด์Šˆ๊ฐ€ ์ƒ๊ธฐ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋‹คํ–‰ํžˆ ํ•ด๋‹น ์ ‘๊ทผ์ด ๋งž์•˜๊ณ  ํ•ด๊ฒฐ!

function solution(diffs, times, limit) {
    
    let max = 100000, min = 1, mid = undefined
    let answer = max
    while(min<=max){
        mid = Math.floor((max+min)/2)
        let spendTime = 0, over = false
        for(let i=0; i<diffs.length; ++i){
            
            if(mid-diffs[i]<0){
                spendTime = spendTime + (diffs[i]-mid)*(times[i]+times[i-1]) + times[i] 
            }else{ 
                spendTime+= times[i]
            }
            
            if(limit<spendTime){
                over = true
                break;
            }
        }
        
        if(over){
           min = mid + 1
        }else{
           answer = mid 
           max = mid -1 
        }
        
    }
    return answer
    
}