๋ฌธ์
ํ๋ก๊ทธ๋๋จธ์ค ์ ๊ตญ์ฌ์ฌ
https://school.programmers.co.kr/learn/courses/30/lessons/43238
์ฝ๋
def solution(n, times):
answer = 0
# s(start), e(end) ํฌํฌ์ธํฐ!
s = 1
e = max(times) * n
while s <= e: # ๊ต์ฐจ๋ ๋ ์คํ
mid = (s+e) // 2
check_person = 0
for time in times:
check_person += mid // time # check_person ์ ๋ชจ๋ ์ฌ์ฌ๊ด๋ค์ด mid๋ถ ๋์ ์ฌ์ฌํ ์ฌ๋์ ์
if check_person >= n:
break
#์
?
if check_person >= n:
e = mid - 1
answer = mid
# ๋ค์ด?
else:
s = mid + 1
return answer
ํ์ด
s = 1
e = max(times) * n
์์์ ๊ณผ ๋์ ์ ์ด๋ถํ์ ํ ๊ณณ์ ๋ฒ์๋ค.
ํฌํฌ์ธํฐ๋ก ์์์ ๊ณผ ๋์ ์ ์ง์ ํด์ค๋ค.
๋ชจ๋ ์ฌ๋์ด ์ฌ์ฌ๋ฐ๋๋ฐ ๊ฑธ๋ฆด ์ ์๋ ์๊ฐ์ ๋ฒ์๋ก ์ก์๊ฒ์ด๊ธฐ ๋๋ฌธ์
์์์ ์ 1,
๋์ ์ (์ต๋ ์ ๊ตญ์ฌ์ฌ ๊ธฐ๊ฐ) * (๋๊ธฐ์ธ์) ์ผ๋ก ์ค์ ํ๋ค.
while s <= e: # ๊ต์ฐจ๋ ๋ ์คํ
mid = (s+e) // 2
check_person = 0
for time in times:
check_person += mid // time # check_person์ ๋ชจ๋ ์ฌ์ฌ๊ด๋ค์ด mid๋ถ ๋์ ์ฌ์ฌํ ์ฌ๋์ ์
if check_person >= n:
break
mid๋ ๋ฒ์๋ด ์ค๊ฐ์ง์ ์ด๋ค.
s ~ e ๋ฒ์ ๋ด์์ check_person์ด n์ด ๋๋ ์๊ฐ์ ์ฐพ๋๋ค.
์ฌ์ฌ์๊ฐ ๋ฐฐ์ด์ ๋๋ฉฐ ๋ชจ๋ ์ฌ์ฌ๊ด๋ค์ด mid๋ถ ๋์ ์ฌ์ฌํ ์ฌ๋์ ์(check_person)๋ฅผ ์ผ๋ค.
๋ง์ฝ check_person์ด n์ด์์ด ๋๋ฉด ๋ฐ๋ณต๋ฌธ์ ๋ฉ์ถ๋ค.
#์
?
if check_person >= n:
e = mid - 1
answer = mid
# ๋ค์ด?
else:
s = mid + 1
check_person์ด n๋ณด๋ค ํฌ๋ฉด ๋ฒ์ ๋์ (e)๋ฅผ mid - 1๋ก ์ค์ ํ๊ณ while๋ฌธ ์ฒ์์ผ๋ก ๊ฐ์ ๋ค์ ํ์ํ๋ค.
check_person์ด n๋ณด๋ค ์์ผ๋ฉด ๋ฒ์ ์์์ (s)๋ฅผ mid + 1๋ก ์ค์ ํ๊ณ while๋ฌธ ์ฒ์์ผ๋ก ๊ฐ์ ๋ค์ ํ์ํ๋ค.
์ด๋ ๊ฒ ๋ฐ๊ฐํ๋ฉด์ ํ์์ ์งํํ๋ค ๋ฒ์์ ์์์ , ๋์ ์ด ๊ต์ฐจ๋๋ฉด while๋ฌธ์ ์ข ๋ฃํ๋ค.
์๋กญ๊ฒ ๋ฐฐ์ด์ /๋๋์
- ๋ง์ฝ ๋ฒ์๊ฐ ๋ด๊ฐ ์ค์ ํ๋๊ฒ ์๋๋ผ ๋ฐฐ์ด์ด ์ฃผ์ด์ง๋ค๋ฉด, ๊ทธ ๋ฐฐ์ด์ ์ ๋ ฌํด๋๊ณ ์ด๋ถํ์ ํ๋๊ฒ์ด ์คํ์๋๊ฐ ๋ ๋น ๋ฅด๋ค.
- ์ด๋ถํ์์ ์ด๋ก ์ ์์์ง๋ง, ๋ฌธ์ ์ ์ ์ฉํ๊ธฐ๊ฐ ์ด๋ ค์ ๋ค.
- ์ด๋ถํ์ ์ ํ์ ๋ฌธ์ ๋ฅผ ๋ง์ด ํ์ด๋ณด๋ฉฐ ๊ฐ์ ์ก์๊ฐ๋ ๊ณผ์ ์ด ํ์ํ ๊ฒ๊ฐ๋ค.
๋ ๋์ ์๊ฒฌ์ด๋ ๊ถ๊ธํ์ ๊ฒ ์๋ค๋ฉด ํธํ๊ฒ ๋๊ธ ๋ฌ์์ฃผ์ธ์ :)
'์ฝ๋ฉํ ์คํธ๐ก' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] ๊ฐ์ํ๋ ์ (0) | 2024.06.15 |
---|---|
[๋ฐฑ์ค] ์ซ์์นด๋2 (0) | 2024.06.14 |
[ํ๋ก๊ทธ๋๋จธ์ค] ํ๊ฒ ๋๋ฒ (0) | 2024.05.30 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์นดํซ (0) | 2024.05.28 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ฐ์ฅ ํฐ ์ (0) | 2024.05.26 |