1. ๋ฌธ์ ์ค๋ช
๋ฌธ์ URL : https://www.acmicpc.net/problem/2417
์ด ๋ฌธ์ ๋ ์ฃผ์ด์ง ์์ฐ์ n ์ ๋ํด, ๊ทธ ์๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ๊ฐ์ฅ ์์ ์ ๊ณฑ์๋ฅผ ์ฐพ๋ ๋ฌธ์ ์
๋๋ค. ์๋ฅผ ๋ค์ด, n ์ด 10์ผ ๊ฒฝ์ฐ, 4์ ์ ๊ณฑ์ธ 16์ด 10๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ์ต์์ ์ ๊ณฑ์์
๋๋ค. ๋ฐ๋ผ์, ์ถ๋ ฅ๊ฐ์ 4๊ฐ ๋ฉ๋๋ค.
2. ์ ๋ต์ฝ๋
import sys
input = sys.stdin.readline
# ์
๋ ฅ๊ฐ n์ ์ ์๋ก ์ฝ์ด๋ค์
n = int(input())
# ์ด๋ถ ํ์์ ์ํ ์์์ ๊ณผ ๋์ ์ค์
s = 0
e = 2**63
ans = -1
# ์ด๋ถ ํ์ ์ํ
while s <= e:
mid = (s + e) // 2 # ์ค๊ฐ๊ฐ ๊ณ์ฐ
if mid**2 >= n: # ์ค๊ฐ๊ฐ์ ์ ๊ณฑ์ด n๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ๊ฒฝ์ฐ
ans = mid # ๊ฐ๋ฅํ ๋ต์ผ๋ก ์ค์
e = mid - 1 # ๋ ์์ ๋ฒ์์์ ํ์ ๊ณ์
else:
s = mid + 1 # ์ค๊ฐ๊ฐ์ ์ ๊ณฑ์ด n๋ณด๋ค ์์ ๊ฒฝ์ฐ ๋ ํฐ ๋ฒ์์์ ํ์
# ์ ๋ต ์ถ๋ ฅ
print(ans)
3. ์ฝ๋์ค๋ช
1) ๋ณ์ ์ด๊ธฐํ : ๋จผ์ , ์
๋ ฅ๋ฐ์ ์์ฐ์ n ์ ์ ์๋ก ๋ณํํ์ฌ ์ ์ฅํฉ๋๋ค. ์ด์ ํจ๊ป ์ด๋ถ ํ์์ ์ํ ์์์ s ์ ๋์ e ๋ฅผ ์ด๊ธฐํํฉ๋๋ค. e ๋ 2^{63} ์ผ๋ก ์ค์ ํ์ฌ ๋งค์ฐ ํฐ ๋ฒ์๊น์ง ํ์ํ ์ ์๋๋ก ํฉ๋๋ค. ๋ํ, ๋ต์ ์ ์ฅํ ๋ณ์ ans ๋ฅผ -1๋ก ์ด๊ธฐํํฉ๋๋ค.
2) ์ด๋ถ ํ์ ์ํ : ์ด๋ถ ํ์์ ํตํด n ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ์ต์์ ์ ๊ณฑ์๋ฅผ ์ฐพ์ต๋๋ค. ๋จผ์ ์ค๊ฐ๊ฐ mid ๋ฅผ ๊ณ์ฐํ ํ, mid ์ ์ ๊ณฑ์ด n ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์์ง ํ์ธํฉ๋๋ค. ๋ง์ฝ ํฌ๊ฑฐ๋ ๊ฐ๋ค๋ฉด, ์ด ๊ฐ์ ๊ฐ๋ฅํ ๋ต์ผ๋ก ์ค์ ํ๊ณ , ๋ ์์ ๋ฒ์๋ฅผ ํ์ํฉ๋๋ค. ๊ทธ๋ ์ง ์๋ค๋ฉด, ๋ ํฐ ๋ฒ์๋ฅผ ํ์ํฉ๋๋ค.
3) ์ ๋ต ์ถ๋ ฅ : ์ต์ข
์ ์ผ๋ก ํ์์ ๋ง์น ํ, ์ฐพ์ ๊ฐ์ ์ถ๋ ฅํฉ๋๋ค.
4. Github์ผ๋ก ํ์ธ
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ(๋ฐฑ์ค)_Python_Easy' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 2015[์๋ค์ ํฉ 4] (0) | 2024.08.24 |
---|---|
๋ฐฑ์ค 2178[๋ฏธ๋ก ํ์] (0) | 2024.08.18 |
๋ฐฑ์ค 1343[ํด๋ฆฌ์ค๋ฏธ๋ ธ] (0) | 2024.08.14 |
๋ฐฑ์ค 1748[์ ์ด์ด ์ฐ๊ธฐ 1] (0) | 2024.08.09 |