한국어/Hackerrank - 한국어 버전과 문제가 다를 수 있습니다. 채점은 Hackerrank를 추천합니다.
1 <= 입력 개수, 입력값 <= 3000
for _ in range(int(input())):
n = int(input())
ans = -1
for a in range(3, n//3+1):
b = (n**2 - 2*n*a)/(2*(n - a))
if b == int(b):
c = n-b-a
if a*b*c > ans:
ans = a*b*c
print(int(ans))
피타고라스 수를 얻기 위해 이중 반복문을 써도 되지만 아래와 같은 식을 통해 n과 a가 있을 때 b를 구할 수 있습니다.
따라서 위와 같이 b를 구하는데 b가 정수가 아닐 수도 있기 때문에 정수일 때만 c를 구해서 더 큰 a*b*c를 저장합니다.
가장 작은 피타고라스 수는 3, 4, 5이기 때문에 a는 3부터 시작하며 의미상 a=b=c일 때가 최소라고 한다면 a는 n/3까지이다.
'알고리즘 공부 > 프로젝트 오일러(Project Euler)' 카테고리의 다른 글
{프로젝트 오일러/Project Euler} 11. 격자 속 연속된 수의 곱의 최댓값 (0) | 2021.01.07 |
---|---|
{프로젝트 오일러/Project Euler} 10. 소수들의 합 (0) | 2021.01.06 |
{프로젝트 오일러/Project Euler} 8. 이어진 수의 곱의 최댓값 (0) | 2021.01.04 |
{프로젝트 오일러/Project Euler} 7. 10001번째 소수 (0) | 2021.01.03 |
{프로젝트 오일러/Project Euler} 6. 제곱의 합과 합의 제곱의 차 (0) | 2021.01.03 |