Algorithm/programmers.co.kr
프로그래머스 연습문제 : 정수 제곱근 판별
winney916
2024. 10. 24. 10:51
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/12934#
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
음.. 쉬운 문제라고 생각하고 풀었는데, 채점 케이스에서 마지막 케이스가 오류가 나왔다.
보통 이런 경우는 극단값을 생각하면 된다.
틀린 코드
def solution(n):
answer = -1
for i in range(1, n//2):
# print(i)
if i**2==n:
return (i+1)**2
return answer
이 코드에서 생각해볼 수 있는 극단값은 무엇일까?
입력값 n의 범위는 1부터 50000000000000까지이다.
1을 넣으면, 1은 1의 제곱이기 때문에 (1+1)의 제곱인 4가 출력되어야 한다.
하지만 위의 코드에서는 1을 넣을 경우 for문이 돌아가지 않고 -1이 리턴된다.
따라서 1이 들어간 경우에도 for문이 실행될 수 있도록 range를 조절해야한다.
정답 코드
def solution(n):
answer = -1
for i in range(1, n//2+2):
# print(i)
if i**2==n:
return (i+1)**2
return answer
"""
채점 마지막 케이스 오류
-> 극단값 조사 : n=1, return 4
"""
"항상 극단값을 고려하자. 입력값의 범위를 기억할 것"