https://school.programmers.co.kr/learn/courses/30/lessons/12980
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๋ฌธ์ ๋ฅผ ๋ณด์๋ง์ ๋๋ฌด dp๋ฌธ์ ๊ฐ์์ dp ๋ก ํ์๋๋ฐ,
์ ํ์ฑ ํ ์คํธ๋ ๋ชจ๋ ์ฑ๊ณตํ์ง๋ง, ํจ์จ์ฑ ํ ์คํธ์์ ์ ๋ถ ๋ค ์๊ฐ์ด๊ณผ๊ฐ ๋ด๋ค.
์ฒ์ ์ ์ถํ ์ฝ๋๋ ์ด๋ ๋ค.
python
def solution(n):
INF = int(1e9)
dp = [INF for _ in range(n+1)]
dp[0] = 0
dp[1] = 1
for i in range(1,n+1):
dp[i] = min(dp[i], dp[i-1]+1)
if i*2 < n+1: # ์๊ฐ์ด๋์ด ๊ฐ๋ฅํ๋ค๋ฉด ์๊ฐ์ด๋
if i*2 == n:
return dp[i]
dp[i*2] = dp[i]
return dp[n]
์ ์ฝ๋๋ ๋น ์ค์๊ฐ์ด O(n)์ด๊ธฐ ๋๋ฌธ์ ์๊ฐ ๋ณต์ก๋๊ฐ ๋ ์ข์ ์ฝ๋๋ฅผ ์๋ก ์ง์ผ๊ฒ ๋ค๊ณ ๋๊ผ๋ค.
์ฆ ๋ชจ๋ i๊ฐ์ ํ๋ํ๋ ํ์ธํด๊ฐ๋ฉฐ ๊ฑด์ ์ง ์๋ชจ๋์ ๊ณ์ฐํ๋ ํ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ์ ๋๋ค.
๋ค๋ฅธ ํ์ด๋ฅผ ์ฐธ๊ณ ํ์ฌ O(logn) ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ๋ ์ฝ๋๋ฅผ ์๋ก ์์ฑํ๋ค
def solution(n):
ans = 0
while n:
if n%2 == 0:
n /= 2
else:
n -= 1
ans += 1
return ans
'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด > -' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ์์ ๋ง๋ค๊ธฐ (0) | 2023.10.04 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค]n^2 ๋ฐฐ์ด ์๋ฅด๊ธฐ (0) | 2023.07.21 |
[ํ๋ก๊ทธ๋๋จธ์ค]ํ๋ฐฐ์์ (0) | 2023.06.23 |
[ํ๋ก๊ทธ๋๋จธ์ค]ํ์ผ๋ช ์ ๋ ฌ (0) | 2023.06.23 |
[ํ๋ก๊ทธ๋๋จธ์ค]2๊ฐ ์ดํ๋ก ๋ค๋ฅธ ๋นํธ (0) | 2023.06.22 |