Baekjoon 문제 풀기 (1977번 : 완전제곱수) Python
1977번 : 완전제곱수
1. 문제읽기
제곱과 구현 문제.
약간의 수학적인 지식과 조건을 잘 구현할 수 있다면 풀 수 있는 문제이다.
2. 제출 코드
루트를 쓰지 않아도 풀 수 있는 문제같았지만 안쓰고 풀려니 생각이 나지 않아서 그냥 썼다.
그리고 바보같이 1부터 10000까지 리스트를 다 만들었다.
그냥 i 변수를 정해주고 +1 시켜주면되는데.. 점점 기초적인 지식을 잃어가는 느낌이다..
import math
m = int(input())
n = int(input())
arr = [i for i in range(m, n+1)] # m 부터 n 까지 자연수 리스트
number = [i for i in range(1, 10001)] # 1부터 10000까지 자연수리스트
ans_arr = []
a = math.sqrt(m)
b = math.sqrt(n)
for i in number:
if a <= i <= b:
ans_arr.append(i*i)
if i > b:
break
if len(ans_arr) != 0:
print(sum(ans_arr))
print(ans_arr[0])
else:
print(-1)
3. 공부할 것
다른 사람들 코드를 보니 정말 여러방식으로 풀었다.
- 완전제곱수는 10000 이하의 자연수이므로 100까지 제곱을 돌려서 비교한다.
- 1부터 제곱을하면서 제곱수가 n보다 크면 반복문을 종료한다.
- m부터 n까지 수를 루트를 씌운 수의 int값이 제곱을 한 값과 같다면 제곱수이다.
어떤 방식이 효율적인가에 대해서 고민해봤는데, 아직까지는 다 고만고만한 것 같다.
댓글남기기