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. 공부할 것


다른 사람들 코드를 보니 정말 여러방식으로 풀었다.

  1. 완전제곱수는 10000 이하의 자연수이므로 100까지 제곱을 돌려서 비교한다.
  2. 1부터 제곱을하면서 제곱수가 n보다 크면 반복문을 종료한다.
  3. m부터 n까지 수를 루트를 씌운 수의 int값이 제곱을 한 값과 같다면 제곱수이다.

어떤 방식이 효율적인가에 대해서 고민해봤는데, 아직까지는 다 고만고만한 것 같다.

댓글남기기