Algorithm/Programmers
[JavaScript] ํ๋ก๊ทธ๋๋จธ์ค - ์ ๊ตญ์ฌ์ฌ
๊ฐ๋ฐ๊ฐ๊ตด๐ธ
2022. 8. 27. 17:52
[๋ฌธ์ ]
https://school.programmers.co.kr/learn/courses/30/lessons/43238
[ํ์ด]
์ด๋ถํ์์ ์ด์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํ์ดํ์์ต๋๋ค.
์์ ์ฒ๋ผ n์ด 6์ด๊ณ , time๊ฐ [7, 10] ์ด๋ผ๋ฉด, ์ต๋ ์ฌ์ฌ ์๊ฐ์ 10*6 = 60๋ถ์ด๋ฉ๋๋ค.
์ต๋ ์ฌ์ฌ ์๊ฐ 60์ ๊ธฐ์ค์ผ๋ก ์น๊ฐ์ ์ฌ์ฌํ๋ค๋ฉด ์ฌ์ฌ ๊ฐ๋ฅ ์น๊ฐ์ ์๋์ ๊ฐ์ต๋๋ค.
60 / 7 = 8๋ช + 60 / 10 = 10๋ช = 18๋ช
ํ์ง๋ง, ์ต์ ์๊ฐ์ผ๋ก 6๋ช ์ ์น๊ฐ์ ๋ชจ๋ ์ฌ์ฌํด์ผ ํ๋ฏ๋ก, left = 1, right = 60์ผ๋ก ์ด๋ถํ์์ ์งํํฉ๋๋ค.
mid = (1 + 60)/2 = 30์ผ๋ก ์์ํ์ฌ ์๋์ ๊ฐ์ด ์ด๋ถํ์์ ์งํํฉ๋๋ค.
- mid์๊ฐ ๊ธฐ์ค์ผ๋ก ์ฌ์ฌ ๊ฐ๋ฅ ์น๊ฐ์ด 6๋ณด๋ค ์๋ค๋ฉด, left = mid + 1๋ก ๊ฐฑ์
- mid์๊ฐ ๊ธฐ์ค์ผ๋ก ์ฌ์ฌ ๊ฐ๋ฅ ์น๊ฐ์ด 6๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๋ค๋ฉด, right = mid - 1๋ก ๊ฐฑ์
๋ฐ๋ผ์ ์ต์ข ์ ์ผ๋ก left์ ์ต์ ์๊ฐ์ด ์ ์ฅ๋๊ฒ ๋๊ณ , ์ด 28๋ถ์ผ๋ก ๋ชจ๋ ์น๊ฐ์ ์ฌ์ฌํ ์ ์์ต๋๋ค.
[์ฝ๋]
function solution(n, times) {
var answer = 0;
times.sort((a, b) => a - b);
const max = times[times.length -1]*n;
let left = 1;
let right = max;
while(left <= right) {
let mid = Math.floor((left + right)/2);
let count = 0;
for(let i=0;i<times.length;i++) {
count += Math.floor(mid/times[i]);
}
if(count >= n) {
right = mid - 1;
} else {
left = mid + 1;
}
}
answer = left;
return answer;
}