|
์ฝ๋ ์์ฑํ๊ธฐ
from math import ceil
def solution (n, times):
answer = 0
lo = ceil(min(times) * n / len(times))
mx = ceil(max(times) * n / len(times))
while lo <= mx:
mid = (lo + mx)//2
sum = 0
for i in range(len(times)):
sum += mid // times[i]
if sum >= n:
mx = mid - 1
else:
lo = mid + 1
return lo
Java
๋ณต์ฌ
|
์ฝ๋ ์ค๋ช
ํ๊ธฐ
โข
์ฌ์ฌํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋ฒ์ :
์ต์ ์๊ฐ = math.ceil(min * n / len(times))
์ต๋ ์๊ฐ = max * n
โข
answer๊ฐ ์ด ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด๋ผ๊ณ ํ๋ฉด answer//times[i]์ ์ฌ์ฌ๊ด ํ ๋ช
์ด ์ผ์ ์๊ฐ ๋น ์ฒ๋ฆฌํ ์ ์๋ ์ฌ๋์ ์์ด๋ค. ๊ทธ๋์ for๋ฌธ์ ์ด์ฉํ์ฌ ์ด ํฉ์ ๊ตฌํ๋ฉด ์ด ์ฒ๋ฆฌํ ์ ์๋ ์ฌ๋์ ์๊ฐ ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ํฉ์ด n์ด ๋๋ ์ต์์ ์๋ฅผ ๊ตฌํ๋ฉด ๋๋ค.
answer//times[0] + answer//times[1] + .. + answer//times[-1] = n
โข
์ด๋ถ ํ์์ ํตํด ์ค๊ฐ๊ฐ(์ด ๊ฑธ๋ฆฌ๋ ์๊ฐ)์ ์ ํ๊ณ ํฉ(์ฒ๋ฆฌํ ์ ์๋ ์ฌ๋์ ์)์ด n๋ณด๋ค ์์ผ๋ฉด ์ ๋๊ธฐ ๋๋ฌธ์ ์์ผ๋ฉด ์ค๊ฐ๊ฐ์ ์์ชฝ์ ํ์ํ๋๋ก low๊ฐ์ ์ธ๋ฑ์ค๋ฅผ mid+1๋ก ์ฎ๊ธด๋ค. ๊ทธ๋ฆฌ๊ณ ํฉ์ด n๊ณผ ๊ฐ์ ๋๋ ์ด์ฐจํผ ์ต์๊ฐ์ด ์ค์ํ๊ธฐ ๋๋ฌธ์ ์๋์ชฝ์ ํ์ํ๋ ๊ฑธ๋ก ํ๋ค.