알고리즘 연습/구현, 문자열

[🥉1 / 백준 1977 / 파이썬] 완전제곱수

김세진 2021. 8. 20. 21:04
반응형

 

 

1977번: 완전제곱수

M과 N이 주어질 때 M이상 N이하의 자연수 중 완전제곱수인 것을 모두 골라 그 합을 구하고 그 중 최솟값을 찾는 프로그램을 작성하시오. 예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 완

www.acmicpc.net

 

문제

M과 N이 주어질 때 M이상 N이하의 자연수 중 완전제곱수인 것을 모두 골라 그 합을 구하고 그 중 최솟값을 찾는 프로그램을 작성하시오. 예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 완전제곱수는 64, 81, 100 이렇게 총 3개가 있으므로 그 합은 245가 되고 이 중 최솟값은 64가 된다.

입력

첫째 줄에 M이, 둘째 줄에 N이 주어진다. M과 N은 10000이하의 자연수이며 M은 N보다 같거나 작다.

출력

M이상 N이하의 자연수 중 완전제곱수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 단, M이상 N이하의 자연수 중 완전제곱수가 없을 경우는 첫째 줄에 -1을 출력한다.

 

예제 입력 1 

60
100

예제 출력 1 

245
64

예제 입력 2 

75
80

예제 출력 2 

-1

 

풀이

 

제곱과 제곱근, 소수점을 다루는 문제이다.

 

예제 1의 풀이로 설명을 대체하겠다.

기본적으로 60 <= 완전제곱수 <= 100 을 만족해야 한다.

문제를 쉽게 풀기 위해 루트를 씌워주도록 하자.

 

7.746 <= 완전제곱수0.5 <= 10 이 되었다.

여기서 7.746 이상의 자연수만 답이 될 수 있으므로 math.ceil로 올림을 해주면

8,9,10 이 완전제곱수의 제곱근에 해당한다.

 

위 숫자들에 제곱을 해주고 이를 합과 최솟값으로 출력해주자.

 

import math
m,n = int(input()),int(input())
r = []
for i in range(math.ceil(m**0.5),int(n**0.5)+1):
    r.append(i**2)
if r:
    print(sum(r),r[0],sep="\n")
else:
    print(-1)
반응형