728x90
반응형
정답 code
#Four Squares
import sys
def check(n):
# n의 제곱근이 정수라면 1출력
if (n**0.5).is_integer() :
return 1
# n보다 작은 어떤 수를 뺀 수의 제곱근이 정수라면 2출력 ex(A^2+B^2)
for i in range(1, int(n**0.5)+1):
if (int(n-i*i)**0.5).is_integer():
return 2
#n보다 작은 어떤 제곱근의 수를 두개뺀 수의 제곱근이 정수라면 3출력 ex(A^2+B^2+C^3)
for i in range(1,int(n**0.5)+1):
for j in range(1, int((n-i*i)**0.5)+1) :
if ((n-(i*i)-(j*j))**0.5).is_integer():
return 3
#해당하지 않을경우 4출력
return 4
n = int(sys.stdin.readline())
print(check(n))
시간초과 code
-dp사용
#Four Squares
n = int(input())
d = [0]*(n+1)
d[1] = 1
for i in range(2,n+1):
j = 1
min_cnt = 4
while((j**2)<=i):
a = d[i-(j**2)]
min_cnt = min(min_cnt,a)
j += 1
d[i] = min_cnt+1
print(d[n])
solution
dp방식은 pypy3방식으로 제출하지 않는이상 시간초과가 발생하여 브루트포스 방식으로 해결하였다.
1: n의 제곱근이 정수인경우 = 1 ex) 16 = 4**2, 64 = 8**2
2: n보다 작은 어떤 수를 뺀 수의 제곱근이 정수인경우(A^2+B^2) =2 ex)17 - 4**2 = 1**2, 40 - 6**2 = 2**2
3: n보다 작은 어떤 제곱근의 수를 두개뺀 수의 제곱근이 정수인경우(A^2+B^2+C^3) =3 ex)49 - 6**2 - 3**2 = 2**2
4: 나머지 경우
728x90
반응형
'알고리즘 > 백준[baekjoon]' 카테고리의 다른 글
[baekjoon] 백준 1149번 : RGB거리 (by python 파이썬) DP 다이나믹 프로그래밍 (0) | 2022.08.14 |
---|---|
[baekjoon] 백준 1043번 : 거짓말 (by python 파이썬) set 집합 (0) | 2022.08.12 |
[baekjoon] 백준 17219번 : 비밀번호 찾기 (by python 파이썬) rstrip,딕셔너리 (0) | 2022.08.08 |
[baekjoon] 백준 16928번 : 뱀과 사다리 게임 (by python 파이썬) BFS (0) | 2022.08.08 |
[baekjoon] 백준 16236번 : 아기 상어 (by python 파이썬) bfs, lambda정렬 (0) | 2022.08.02 |