반응형
https://www.acmicpc.net/problem/1977
1977번: 완전제곱수
M과 N이 주어질 때 M이상 N이하의 자연수 중 완전제곱수인 것을 모두 골라 그 합을 구하고 그 중 최솟값을 찾는 프로그램을 작성하시오. 예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 완
www.acmicpc.net
내 코드
import sys
input = sys.stdin.readline
a=int(input())
b= int(input())
ans =[]
for i in range(a,b+1):
root = int(i**0.5)
if i == root**2:
ans.append(i)
if ans:
print(sum(ans))
print(min(ans))
else:
print(-1)
완전제곱수

정말 황당하게도 이렇게 간단한 문제를 많이 틀렸다. 그만큼 이해가 안 된 부분이 있었다는 얘기겠지 싶다.
내가 계속 틀렸던 부분은 이 부분이었다.
for i in range(a,b+1):
root = int(i**0.5)
root에 int를 입히지 않아서 수가 정말 이상하게 많이 나왔다.
i의 type을 출력해보니 분명 int인데, int를 입히지 않기 전까지는 수많은 오류가 발생했다.
이러한 이유는 root는 i**0.5이며, 곧 소수점을 덕지덕지 붙인 소수가 등장하게 된다.
하지만 완전제곱수는 자연수만을 취급한다.
그래서 int(i**0.5)를 해줌으로써 자연수만 취급할 수 있도록 만들어주는 것이다.
반응형
'코딩테스트 대비 > 백준(BOJ)' 카테고리의 다른 글
| [Python][백준/BOJ] 11722번 : 가장 긴 감소하는 부분 수열 (0) | 2023.07.25 |
|---|---|
| [Python][백준/BOJ] 11050번 : 이항 계수 1 (0) | 2023.07.25 |
| [Python][백준/BOJ] 1252번 : 이진수 덧셈 (0) | 2023.07.25 |
| [Python][백준/BOJ] 22233번 : 가희와 키워드 (0) | 2023.07.25 |
| [Python][백준/BOJ] 14888번 : 연산자 끼워넣기 (0) | 2023.07.24 |