알고리즘 연습/구현, 문자열
[🥉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을 출력한다.
예제 입력 160100 |
예제 출력 124564 |
예제 입력 27580 |
예제 출력 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)
반응형