jyamethyst21 님의 블로그

백준 1977번 - '완전제곱수' (PYTHON 풀이) 본문

CODING 💻

백준 1977번 - '완전제곱수' (PYTHON 풀이)

jyamethyst21 2026. 2. 23. 00:45

문제:

 

1,4,9,16 ... 과 같이 어떤 수를 제곱한 값인 완전제곱수를 구하는 문제이다.

 

풀이:

M = int(input())
N = int(input())

total = 0
minimum = 0

for i in range(1, 101):
    square = i * i
    
    if square > N:
        break

    if square >= M:
        total += square
        if minimum == 0:
            minimum = square

if total > 0:
    print(total)
    print(minimum)
else:
    print(-1)

M, N을 입력받고 합계와 최솟값을 계산할 변수 두개를 0으로 초기화한다.

문제를 보면 'M과 N은 10000이하의 자연수이며 M은 N보다 같거나 작다.' 라는 조건이 있기 때문에 '루트10000 = 100', 즉, 100까지 제한이 걸려있는 것을 활용하면 for문을 간단히 만들 수 있다.

그래서 1부터 100까지 제곱한 값을 square에 넣고, 이 값이 최대값인 N보다 크다면 값이 없는 것이므로 반복문을 탈출하고, 그게 아니라면 M과 비교하여 같거나 클 경우 합계에 해당 제곱근을 누적합으로 더하여 총 합계를 구한다. 그리고 최초로 total에 제곱값이 더해질 때 minimum이 0으로 초기화되어 있으므로 최솟값에 square 값이 더해져서 minumum까지 구할 수 있게 된다.

 

모든 반복문이 돌아간 다음에는 총 합계를 확인해서 0보다 클 경우는 해당하는 범위 내에 제곱근이 있단 뜻이므로 합계와 최솟값을 출력하고, 그게 아니라면 -1을 출력한다.