

문제를 살펴보면 모든 자연수가 4개 이하의 제곱수의 합으로 표현가능하다고한다
주어진 수를 몇개의 제곱수 합으로 표현가능한지 구하는 문제이다
문제를 보자말자 가장 먼저 든 생각은 제곱수를 활용해서 위에서부터 내려가며 제곱수로 표현가능한지 확인하는것이었다
이전에 풀었던 문제에서 sol()함수를 구현했어서 해당 함수를 수정하여 코드를 완성하였다
먼저 if문을 통해 현재 입력받은 수의 제곱근을 구하였을때, 제곱근이 정수인지 확인해주었다
제곱근이 정수가 아니라면 하나의 제곱수로 나타낼 수 없다는 뜻이 된다
이후 for문을 통해 특정 제곱수를 입력받은 k에서 뺀 후에 해당 값(제곱근)이 정수인지 확인하면된다
3개의 제곱수가 필요한 경우는 for문을 두 개 만들어 확인해주면 된다
최종적으로 3개의 제곱수로도 표현이 되지 않는다면 무조건 4개의 제곱수로 표현되므로(문제 조건)
return 4를 하면서 함수를 종료하면된다
import sys
input = sys.stdin.readline
import math as m
def sol(k):
if int(m.sqrt(k)) == m.sqrt(k):
return 1
for i in range(1, int(m.sqrt(k))+1):
if int(m.sqrt(k-i**2)) == m.sqrt(k-i**2):
return 2
for i in range(1, int(m.sqrt(k))+1):
for j in range(1, int(m.sqrt(k-i**2))+1):
if int(m.sqrt(k-i**2-j**2)) == m.sqrt(k-i**2-j**2):
return 3
return 4
num = int(input())
print(sol(num))


'Baekjoon' 카테고리의 다른 글
| [Baekjoon]백준 24444 알고리즘 수업 - 너비 우선 탐색 1(실버 2) - Python (0) | 2025.05.08 |
|---|---|
| [Baekjoon]백준 1202 보석 도둑(골드 2) - Python (0) | 2025.05.05 |
| [Baekjoon]백준 15663 N과 M (9)(실버 2) - Python (0) | 2025.05.02 |
| [Baekjoon]백준 1568 새(브론즈 2) - Python (0) | 2025.04.23 |
| [Baekjoon]백준 2776 암기왕(실버 4) - Python (0) | 2025.04.21 |