-
[๋ฐฑ์ค] 1660 ์บกํด ์ด๋ค์ with PythonPS 2022. 3. 6. 01:17728x90๋ฐ์ํ
๐ BOJ 1660 ์บกํด ์ด๋ค์
๐ก ์กฐ๊ฑด
N์ 300,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.
์ฌ๋ฉด์ฒด๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๊ธธ์ด๊ฐ N์ธ ์ ์ผ๊ฐํ ๋ชจ์์ ๋ง๋ ๋ค.
๊ทธ ์์ ๊ธธ์ด๊ฐ N-1์ธ ์ ์ผ๊ฐํ ๋ชจ์์ ์น๊ณ ๊ทธ์์ ๊ณ์ ํด์ ์น์ด์ 1ํฌ๊ธฐ์ ์ ์ผ๊ฐํ ๋ชจ์์ ์น์ผ๋ฉด ๋๋ค.N๊ฐ์ ๋ํฌ์๋ก ๋ง๋ค ์ ์๋ ์ฌ๋ฉด์ฒด์ ์ต์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ ๋ฌธ์
๋ค์ด๋๋ฏนํ๋ก๊ทธ๋๋ฐ ์ ํ์ ๋ฌธ์
๐ฅ ์์ค ์ฝ๋
from sys import stdin n = int(stdin.readline()) arr = [] num = 0 i = 1 while n > num: num += (i * (i + 1)) // 2 arr.append(num) i += 1 dp = [int(1e9) for i in range(n + 1)] for i in range(1, n + 1): for num in arr: if num == i: dp[i] = 1 break elif num > i: break dp[i] = min(dp[i], 1 + dp[i - num]) print(dp[n])
๐ ์์ ๋ฐ ์คํ๊ฒฐ๊ณผ
์์
15
์คํ๊ฒฐ๊ณผ
3
โจ๏ธ ๋ฌธ์ ํ์ด
๋ํฌ์์ ๊ฐ์๋ 1, 4, 10, 20 ... ์์ผ๋ก ๋์ด๋๋ค.
n์ด 30๋ง์ด๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ํ๋ฒ์ ๋ค ๊ตฌํด๋๊ธฐ์๋ ํ๋ค๊ธฐ ๋๋ฌธ์,
n๋ณด๋ค ๊ฐ๊ฑฐ๋ ๋ง์ ์์ ๋ํฌ๊ฐ ์์ฌ์๋ ์ฌ๋ฉด์ฒด๊ฐ ์ฒ์ ๋ฑ์ฅํ ๋๊น์ง ๊ตฌํด์ผํ๋ค.N ์ด 15๋ผ๋ฉด 1, 4, 10 ์ผ๋ก ๋ง๋ค ์ ์๋ค.
15๋ 14์์ 1์ ๋ํด ๋ง๋ค ์ ์๋ค. 10์์ 4๋ฅผ ๋ํ๊ณ , 5์์ 10์ ๋ํด์ ๋ง๋ค ์ ์๋ค.dp[i] = min(dp[i], 1 + dp[i - num])
๋ผ๋ ์ ํ์์ ์ธ์ธ ์ ์๋ค.
๐พ ๋๋์
- ๋ค์ด๋๋ฏน... ํ๋ก๊ทธ๋๋ฐ...
๋ฐ์ํ'PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1822 ์ฐจ์งํฉ with Python (0) 2022.03.06 [๋ฐฑ์ค] 1788 ํผ๋ณด๋์น์์ ํ์ฅ with Python (0) 2022.03.06 [๋ฐฑ์ค] 1755 ์ซ์๋์ด with Python (0) 2022.03.06 [๋ฐฑ์ค] 16935 ๋ฐฐ์ด ๋๋ฆฌ๊ธฐ 3 with Python (0) 2022.03.04 [๋ฐฑ์ค] 15965 K๋ฒ์งธ ์์ with Python (0) 2022.03.04