ํธ๋ฆฌ์ ๊ฐ๋ ๊ณผ ์ํ, ํ, ํธ๋ผ์ด, ์ ๋ ฌ, ์ด์ง ํ์์ ๋ํด์ ๋ฐฐ์ ๋ค. ์ ๋ ฌ ๋ฌธ์ ๊ฐ์ฅ ํฐ ์ ์์๋ 1์๊ฐ๋์ ํ ์คํธ์ผ์ด์ค ์คํจ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ณด๋๋ค. ๊ทธ๋ผ์๋ ์ ๋ ฌ ๋ฌธ์ ๋ณด๋ค๋ ์๊ณ ๋ฆฌ์ฆ์ด ์ต์ํ์ง ์์ ์ ๊ตญ ์ฌ์ฌ ๋ฌธ์ ๋ฅผ ํ๊ณ ํ๊ณ ์ถ์ด์ ์ ๋๋ค.
์ถ์ฒ : ํ๋ก๊ทธ๋๋จธ์ค
์ ๊ตญ ์ฌ์ฌ
๋ด ๋ต์
function solution(n, times) {
times.sort((a, b) => a - b);
let minTime = 0;
let left = 1;
let right = n * Math.max(...times);
while (left <= right) {
let midTime = Math.floor((left + right) / 2);
let peopleCnt = 0;
for (const time of times) {
peopleCnt += Math.floor(midTime / time);
}
if (peopleCnt >= n) {
minTime = midTime;
right = midTime - 1;
} else {
left = midTime + 1;
}
}
return minTime;
}
์ด์ ์๊ณ ๋ฆฌ์ฆ ํน๊ฐ์์ ์ ํ์ฌํญ์ ๋ณด๋ฉด ๋์ถฉ ์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ง์ผํ ์ง ๋ณด์ธ๋ค๊ณ ํ์๋ค.
๊ทธ๋์ ์ ํ์ฌํญ์ 1,000,000,000 ์ด๊ฐ ๋๋ฌธ์ ์ด ๋ฌธ์ ๋ ๋ฌด์กฐ๊ฑด ์ด์ง ํ์
์ผ๋ก ํธ๋ ๊ฒ์ด๋ผ ํ์ ์ ํ๊ณ ๊ตฌํํด๋ณด์๋ค.
๋ชจ๋ฒ ๋ต์
function solution2(n, times) {
const sortedTimes = times.sort((a, b) => a - b);
let left = 1;
let right = sortedTimes[sortedTimes.length - 1] * n;
while (left <= right) {
const mid = Math.floor((left + right) / 2);
const sum = times.reduce((acc, time) => acc + Math.floor(mid / time), 0);
if (sum < n) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return left;
}
๋ฌธ์ ์ ํ์กฐ๊ฑด์ ๋ณด๊ณ ์ ํ ์ฐพ๊ธฐโ๏ธ
์ด์ ์๊ณ ๋ฆฌ์ฆ ํน๊ฐ์์ ๋ฌธ์ ์ ํ ํ์
๋ฐฉ๋ฒ์์ ์๋์ ๊ฐ์ ๋ถ๋ถ์ ์๊ธฐํด์ฃผ์
จ๋ค.
- ๋ฌธ์ ์ ํ์ ๋ฐ๋ก ํ์ ํ๋ ๊ฒ๋ณด๋ค๋ ๊ฐ๋ฅ์ฑ ์๋ ๋ฐฉ๋ฒ์ ์ขํ๋๊ฐ๋ผ
- ์ ์ถ๋ ฅ ์ ํ๋ถํฐ ํ์ธ
๊ทธ๋์ ์ค๋ ๋ฌธ์ ๋ฅผ ๋ณผ ๋ 1,000,000,000
๋ผ๋ ์ ํ๊ณผ ~๋ผ๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ต๋/์ต์ ๊ฐ์ ์ฐพ์๋ผ
์ ๋ณด์๋ง์ ๋ฐ๋ก ์ด์ง ํ์์ด ๋ ์ฌ๋๊ณ "์ ์ด๋ ๊ฒ ์ฐ์๋๋๊น ๋ฐ๋ก ํ ์ ์๊ฒ ๊ตฌ๋" ๋ผ๊ณ ์๊ฐํ๊ฒ ๋์๋ค.๐
๋ํ ์ ๋ minTime
์ ์ ์ธ ํ์ฌ ์ค๊ฐ์ ๊ฐฑ์ ํด์ฃผ์๋๋ฐ left์ right๋ง์ผ๋ก๋ ๊ณ์ฐํ ์ ์๋ค๋ ๊ฒ์ ์์๋ค. return๊ฐ์ left๋ก ํ๋ฉด ๋๋ ๊ฑฐ์๋๋ฐ.. ์ด๊ฒ ์๊ณ ๋ฆฌ์ฆ์ ์๋ฒฝํ ์ดํดํ์ง ๋ชปํด์ ์๊ธด ๋ณ์๊ฐ ์๋๊น ์ถ์๋ค.๐ฑ
๋ช ์ผ ๋์ ์๊ณ ๋ฆฌ์ฆ์ ํ๊ณ ์๋๋ฐ ๋ค ์๊ณ ์๋ ์๊ณ ๋ฆฌ์ฆ์์๋ ๋ถ๊ตฌํ๊ณ ํ์ ๋ ๋ง๊ณ ํ์ ํ๊ฒ ์ตํ๋ค๋ ์๊ฐ์ด ๊ณ์ ๋ค์๋ค. ์์ผ๋ก ์ง๊ธ์ฒ๋ผ ๊พธ์คํ ๋
ธ๋ ฅํด์ผ์ง๐คฏ
์๊ณ ๋ฆฌ์ฆ ํน๊ฐ์์ n ๋ฒ์ ๋ณด๊ณ ์๊ณ ๋ฆฌ์ฆ ์ ํํ๋ผ๋ ๊ฑฐ ์ง์ง ์ค์ ๊ฟํ์ธ๊ฑฐ ๊ฐ์ต๋๋ค..