๐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
}