-
백준 17626 파이선 | Four squares알고리즘 BOJ 2021. 8. 29. 02:13
코드
import sys n = int(sys.stdin.readline()) ans = 0 lst = [] # 제곱수들 모음 for i in range(1,224): lst.append(i**2) l = len(lst) # 답이 3인 경우 for i in range(l): for j in range(l): for k in range(l): if lst[i] + lst[j] + lst[k] == n: ans = 3 # 답이 2인 경우 for i in range(l): for j in range(l): if lst[i] + lst[j] == n: ans = 2 # 답이 1인 경우 for i in range(l): if lst[i] == n: ans = 1 # ans가 1, 2, 3이 아니면 ans는 무조건 4 if ans == 0: ans = 4 print(ans)
설명
223의 제곱이 49729여서 lst에는 1 부터 223 까지의 제곱수를 저장해 놓는다.
다음으로 답이 3, 2, 1인 경우를 나누어 모든 경우의 수를 다 돌며 답을 찾는다.
최소인 답을 구해야 함으로 순서는 답이 3, 2, 1인 경우로 찾는다.
답은 1, 2, 3, 4 중에 하나니까 마지막 조건문에서 답이 1, 2, 3이 아닌 경우 4로 설정해준다.
224 * 224 * 224 = 11,089,567 으로 반복문을 세 번 돌아도 시간을 초과할 정도는 아니다.
메모리: 124368KB
시간: 184ms
문제
https://www.acmicpc.net/problem/17626
17626번: Four Squares
라그랑주는 1770년에 모든 자연수는 넷 혹은 그 이하의 제곱수의 합으로 표현할 수 있다고 증명하였다. 어떤 자연수는 복수의 방법으로 표현된다. 예를 들면, 26은 52과 12의 합이다; 또한 42 + 32 + 1
www.acmicpc.net
'알고리즘 BOJ' 카테고리의 다른 글
백준 17219 파이썬 | 비밀번호 찾기 (0) 2021.08.30 백준 1764 파이썬 | 듣보잡 (0) 2021.08.30 백준 1676 파이썬 | 팩토리얼 0의 개수 (0) 2021.08.30 백준 1620 파이썬 | 나는야 포켓몬 마스터 이다솜 (0) 2021.08.29 백준 골드5 달성 | 파이썬 python (0) 2021.08.23