ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
๋ฌธ์ ํ์ด
๋ฌธ์ ๋ ํน์ ์๊ฐ 1์ด ๋๊ธฐ ์ํด์ 2, 3์ผ๋ก ๋๋๊ฑฐ๋ -1์ ํ์์ ๋ ์ต์ ํ์๋ก 1์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ฐพ๋ ๊ฒ์ด๋ค. ํจ์จ์ ์ผ๋ก ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด ๋ฉ๋ชจ์ด์ ์ด์ (memoization)์ ํตํด ๋ฌธ์ ๋ฅผ ์ ๊ทผํ๋ฉด ์๊ฐ์ด๊ณผ๋ฅผ ๋ฐ์์ํค์ง ์๊ณ ๋ฌธ์ ๋ฅผ ํ ์ ์๋ค.
๋ฌธ์ ๋ฅผ ํธ๋ ๋ฐฉ๋ฒ์ ๊ทธ๋ฆผ 1๊ณผ ๊ฐ๋ค. ๊ทธ๋ฆผ 1์ 10์ธ ๊ฒฝ์ฐ์ ๋ฉ๋ชจ์ด์ ์ด์ ์ ํตํด ๊ฐ์ ์ฐพ๋ ๊ณผ์ ์ด๋ค. ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ๋ฐ๋ณตํ์ฌ ์นด์ดํธ ๊ฐ์ ๋์ ์์ผ๊ฐ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
- ๊ฐ ์ธ๋ฑ์ค๋ ์ค์ ๊ฐ์ ์๋ฏธํ๋ค. (1 ~ N)
- ์ ๋ ฅ๋ ๊ฐ๊ณผ ์ธ๋ฑ์ค๋ฅผ ์ผ์น์ํค๊ธฐ ์ํด 0๋ฒ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค.
- ์ ๋ ฅ ๊ฐ์ด 1์ธ ๊ฒฝ์ฐ, ํ์๋ 1์ด๋ฏ๋ก ๋ณ๋์ ๋ฉ๋ชจ์ด์ ์ด์ ์ด ํ์ ์๋ค.
-
์
๋ ฅ ๊ฐ์ด 1๋ณด๋ค ํฐ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ํตํด ์ต์ ์นด์ดํธ ํ์๋ฅผ ๊ตฌํ ์ ์๋ค.
- 2๋ก ๋๋์ด ๋จ์ด์ง๋๊ฐ?
- 3์ผ๋ก ๋๋์ด ๋จ์ด์ง๋๊ฐ?
- ์์ ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด ๋ฐ๋ก ์์ ์นด์ดํธ ํ์์์ 1์ ์ถ๊ฐํ๋ค
๊ทธ๋ฆผ 1์ ์์๋ฅผ ๋ณด๋ฉด, 2์ 3์ ๊ฐ๊ฐ ํ๋ฒ์ ๊ณ์ฐ ํ ์ ์์ผ๋ฏ๋ก ์นด์ดํธ ํ์๋ 1์ด๋ค. ๊ทธ๋ค์ ๋ถํฐ๋ 4์ ๊ฒฝ์ฐ 2๋ก ๋๋์ด ๋จ์ด์ง๊ณ ๋ชซ์ 2์ด๊ธฐ์ 2์ ์นด์ดํธ ํ์ + 1์ ํด์ฃผ์ด 2๋ผ๋ ๊ฐ์ ๊ธฐ๋กํ๋ค. ์ด์ ๋ฌ๋ฆฌ 5์ ๊ฒฝ์ฐ 2, 3์ผ๋ก ๋๋์ด ๋จ์ด์ง์ง ์์ผ๋ฏ๋ก ๋ฐ๋ก ์์ 4์ ํฉ์ฐ๋ ์นด์ดํธ ์์ + 1์ ํ๊ฒ ๋๋ฉด 5๋ฅผ ๊ตฌํ๋ ์ต์ ํ์๊ฐ ๋๋ค. ์ด๋ฐ์์ผ๋ก ๊ฐ์ ๊ธฐ๋กํด๋๊ณ , ๋ชซ์ ํด๋นํ๋ ๊ฐ์ ์นด์ดํธ ํ์๋ฅผ ํ์ธํ๊ฑฐ๋, 2์ 3์ผ๋ก ๋๋์ด ๋จ์ด์ง์ง ์์ ๊ฒฝ์ฐ ๋ฐ๋ก ์์ ์์ ๋ํ ์นด์ดํธ๋ฅผ ํ์ธํ๋ฉด ๋๋ค.
์ฝ๋
if __name__ == "__main__":
n = int(input())
memo = [0] * (n + 1)
for i in range(2, (n + 1)):
memo[i] = memo[i - 1] + 1
if i % 2 == 0 and memo[i // 2] + 1 < memo[i]:
memo[i] = memo[i // 2] + 1
if i % 3 == 0 and memo[i // 3] + 1 < memo[i]:
memo[i] = memo[i // 3] + 1
print(memo[n])
์ฐ์ ๋ฐ๋ก ์์ ๊ฐ์์ + 1์ ํ ํ, 2์ 3์ผ๋ก ๋๋์ด๋จ์ด์ง์ง ์๋๋ค๋ฉด ํด๋น ์ซ์์ ์นด์ดํธ ํ์๋ ์์ ๊ฐ + 1์ด ๋๋ค. ์ฆ 1์ ๋นผ์ผํ๋ ์ํฉ์ ๊ทธ๋ฆผ 1์์ ์ธ๋ฑ์ค 5, 7, 10๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ด๋ค.
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 11727 2xn ํ์ผ๋ง 2 (0) | 2020.06.28 |
---|---|
๋ฐฑ์ค: 11726 2xn ํ์ผ๋ง (0) | 2020.06.28 |
๋ฐฑ์ค: 11576 Base Conversion (0) | 2020.06.27 |
๋ฐฑ์ค: 11005 ์ง๋ฒ ๋ณํ 2 (0) | 2020.06.27 |
๋ฐฑ์ค: 2745 ์ง๋ฒ ๋ณํ (0) | 2020.06.27 |