Tags
- queue
- ์ ์๋ก
- Study
- CodingTest
- ๋๋น ์ฐ์ ํ์
- SpringBoot
- dfs
- ๊น์ด ์ฐ์ ํ์
- ๊ทธ๋ํ ์ด๋ก
- stack
- PGM
- Python
- ์๋ฎฌ๋ ์ด์
- ์ ๋ ฌ
- ๊ตฌํ
- ๋ฐฑํธ๋ํน
- BFS
- greedy
- Dynamic Programming
- Java
- BOJ
- LV2
- Brute Force Algorithm
- ๋ฌธ์์ด
- DP
- ์๋ฃ๊ตฌ์กฐ
- ๊ทธ๋ํ ํ์
- ์ํ
- sort
- ๊ต์ฌ
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_17626 : Four Squares ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- ์ ๋ ฅ๋ฐ์ n์ ์ ๊ณฑ์์ ํฉ์ผ๋ก ํํํ ๋ ์ต์ํ์ ๊ฒฝ์ฐ์ ์๋ฅผ ์ถ๋ ฅํ๋ค.
- dp ์ ๋ธ๋ฃจํธ ํฌ์ค ํ์ด ๋ ๊ฐ์ง๊ฐ ๊ฐ๋ฅํ๋ค.
- dp
- dp[n] ๋ฆฌ์คํธ๋ n์ ๋ง๋๋๋ฐ ๋ค์ด๊ฐ๋ '์ ๊ณฑ์ ํฉ ๊ฒฝ์ฐ์ ์์ ์ต์๊ฐ'์ ์ ์ฅํ๋ค.
- dp[0] = 0, dp[1] = 1 ๋ก ์ด๊ธฐํํ๋ค.
- dp[n]์ ๊ตฌํ ๋, 1๋ถํฐ j์ ์ ๊ณฑ์(j**2)๊ฐ i๋ณด๋ค ์ปค์ง๋๊น์ง ๋ฐ๋ณตํ๋ฉฐ ์ต์๊ฐ์ ์ฐพ๋๋ค.
- min_v : i์์ j**2๋ฅผ ๋บ dp๊ฐ( dp[i-j**2] )์ ์ต์๊ฐ
- dp[i]์ ๋ฐฉ๊ธ ๊ตฌํ ์ต์๊ฐ(min_v) + ๋บ๋ j**2(๊ฒฝ์ฐ์ ์ 1)๋ฅผ ์ ์ฅํ๋ค. (dp[i] = min_v + 1)
- ex) dp[5]๋ฅผ ๋ง๋ค๋, dp[4]์ ๊ฐ (1) + j**2์ ๊ฒฝ์ฐ์ ์(1) ํด์ 2๋ฅผ ์ ์ฅ
=> 5๋ฅผ ๋ง๋๋๋ฐ ์ซ์ 2๊ฐ๋ง ์์ผ๋ฉด ๋๋ค. (4 + 1)
- ๋ธ๋ฃจํธ ํฌ์ค
- ๋ฌธ์ ์กฐ๊ฑด์ ์ ๊ณฑ์์ ํฉ์ 4์ดํ์ ์๋ก ๋ํ๋ด๋ผ ํ์ผ๋ฏ๋ก, ๋ต์ 1,2,3,4 ์ค ํ๋์ด๋ค.
- n์ ์ ๊ณฑ๊ทผ์ด ์ ์์ด๋ฉด(n์ด ์ ๊ณฑ์) : 1
- n - i**2์ ์ ๊ณฑ๊ทผ์ด ์ ์์ด๋ฉด : 2 => (n-i**2) + (i**2) ๋ก ํํ ๊ฐ๋ฅ (26์ 25+1 ๋ก ํํ)
- n - i**2 - j**2 ์ ์ ๊ณฑ๊ทผ์ด ์ ์์ด๋ฉด : 3
- ์ด ์ธ์ ๋ชจ๋ 4
- ๋ฌธ์ ์กฐ๊ฑด์ ์ ๊ณฑ์์ ํฉ์ 4์ดํ์ ์๋ก ๋ํ๋ด๋ผ ํ์ผ๋ฏ๋ก, ๋ต์ 1,2,3,4 ์ค ํ๋์ด๋ค.
- dp
๐ธ dp ํ์ด ์ฝ๋ ๐ธ
n = int(input())
dp = [i for i in range(n+1)]
for i in range(2,n+1):
j = 1
min_v = 4
while((j**2)<=i):
dp_v = dp[i-(j**2)]
min_v = min(min_v, dp_v)
j+=1
dp[i] = min_v+1
print(dp[n])
๐ธ ์ฝ๋ ํด์ ๐ธ
- pypy3 ์ ์ถ
- dp๋ฆฌ์คํธ๋ 0๋ถํฐ ์ธ๋ฑ์ค n๊น์ง 0~n์ผ๋ก ์ด๊ธฐํํ๋ค. (0, 1๋ง ๋ฃ์ด๋๋ ๋จ)
- 2๋ถํฐ n๊น์ง dp๋ฆฌ์คํธ๋ฅผ ์ฑ์ ๋๊ฐ๋ค.
- min_v : ๋ฌธ์ ์กฐ๊ฑด์์ ๋ต์ด 4์ดํ์ด๋ฏ๋ก ์ต๋๊ฐ 4๋ฅผ ์ด๊ธฐ๊ฐ์ผ๋ก ๋๋ค
- j๋ 1๋ถํฐ j**2์ด i ์ดํ์ผ๋๊น์ง dp๋ฆฌ์คํธ๋ฅผ ๊ณ์ฐํ๋ฉฐ ์ต์๊ฐ์ ์ฐพ๋๋ค.
- dp[i]์ ์ต์๊ฐ + 1์ ๋ฃ๋๋ค.
๐ธ ๋ธ๋ฃจํธ ํฌ์ค ํ์ด ์ฝ๋ ๐ธ
def solution(n):
if int(n**0.5) == n**0.5:
return 1
for i in range(1, int(n**0.5) + 1):
if int((n - i**2)**0.5) == (n - i**2)**0.5:
return 2
for i in range(1, int(n**0.5) + 1):
for j in range(1, int((n - i**2)**0.5) + 1):
if int((n - i**2 - j**2)**0.5) == (n - i**2 - j**2)**0.5:
return 3
return 4
n = int(input())
print(solution(n))
๐ธ ์ฝ๋ ํด์ ๐ธ
- python3 ์ ์ถ
- ์ ๊ณฑ๊ทผ (n**0.5)์ด ์ ์์ธ์ง ํ์ธํ๋ค. (int()ํจ์์ ๋ฃ์์๋์ ๊ฐ ๋น๊ต)
๐ธ end ๐ธ
- ์๋นํ ์ด๋ ค์ ๋ ๋ฌธ์ ์๋ค. dp ๊ท์น์ ์ฐพ๋๊ฒ๋ ์ด๋ ค์ ๊ณ ๋ธ๋ฃจํธํฌ์ค ํ๊ทธ๋ ์์ด์ ํผ๋์ค๋ฌ์ ๋ ๊ฒ ๊ฐ๋ค.
- ๊ฒฐ๊ตญ ๊ฒ์์ผ๋ก dp ํ์ด ํฌ์คํ ๊ณผ ๋ธ๋ฃจํธํฌ์ค ํ์ด ํฌ์คํ ์ ๋ชจ๋ ์ฐพ์๋ดค์ง๋ง, ๋ฌธ์ ๋ฅผ ๊ผผ๊ผผํ ์ดํดํ๋ ค ๋ ธ๋ ฅํ๋ค.
- dp๋ pypy3๋ก ํต๊ณผ๋์ด์ python3๋ก ํต๊ณผํ๋ ์ฝ๋๋ฅผ ์ฐพ๋ค๊ฐ ๋ธ๋ฃจํธํฌ์ค ํ์ด๋ฅผ ๋ณด๊ฒ๋์๋ค.
728x90
'CodingTest > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_1037 : ์ฝ์ (0) | 2022.09.09 |
---|---|
BOJ_4101 : ํฌ๋? (0) | 2022.09.09 |
BOJ_11727 : 2รn ํ์ผ๋ง 2 (0) | 2022.09.06 |
BOJ_11726 : 2รn ํ์ผ๋ง (0) | 2022.09.05 |
BOJ_11659 : ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ 4 (0) | 2022.09.05 |