[BOJ] 1977: 완전제곱수

이슬비·2023년 2월 3일
0

Algorithm

목록 보기
68/110
post-thumbnail

차근차근 올라자는 마음에서 브론즈 높은 문제부터 풀이 시작!

1. 내 풀이

import sys
input = sys.stdin.readline

m = int(input())
n = int(input())
num = []

for i in range(1, 101):
    if i**2 >= m and i**2 <= n:
        num.append(i**2)
        
if len(num) == 0:
    print(-1)
else:
    print(sum(num))
    print(min(num))

그렇게 어렵지 않은 문제긴 했다. 그런데 처음에 for문 range를 1부터 100까지 줬다가 틀렸어서 ,,, 왜인가 고민을 해보다가, 이런 문제는 대부분 경계값에서 틀리기 때문에 경계값을 고민해봤다. 생각해보니 99까지만 for문을 돌게 되는 것 ㅋ

그래서 101로 고쳐주고 바로 맞았습니다를 받았다!

2. 다른 풀이

m = int(input())
n = int(input())
num = []
i = 1
while i ** 2 <= n:
    if m <= i ** 2 <= n:
        num.append(i ** 2)
    i += 1
if num == []:
    print(-1)
else:
    print(sum(num))
    print(num[0])

풀이출처: https://pacific-ocean.tistory.com/161

브론즈 문제 + 브루트포스여서 시간 고려를 안했다.

그래서 내 풀이가 완벽하다고 볼 수 없는 게, 굳이 쓸데없이! 100까지 for문을 돈다는 것이다. 그래서 for문의 최댓값 부분을 n+1 등의 수로 고쳐준다면 훨씬 더 빠른 코드가 될 것 같다.

3. 마치며

그래 ... 이렇게 한차례 한차례 올라가는 거야 ... 바로 금에다가 머리 깨지 말라고 ...

profile
정말 알아?

0개의 댓글