JSITCLUB
파이썬 - 프로그래머스 - 정수 제곱근 판별 본문
프로그래머스 level 1
문제 설명
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
제한 사항
-
n은 1이상, 50000000000000 이하인 양의 정수입니다.
입출력 예
n | return |
121 | 144 |
3 | -1 |
입출력 예 설명
입출력 예#1
121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 리턴합니다.
입출력 예#2
3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다.
풀이 및 코드 |
문제 요약
주어 진수가 정수의 제곱이면 정수+1의 제곱을 구하는 문제.
문제 설명
이 문제는 생각보다 간단하지 않으니 차근차근 따라오시기 바랍니다.
먼저 문제의 알고리즘을 적어 보면
-
주어진수가 정수의 제곱인지 확인
-
만약 정수의 제곱이면 정수(제곱근)에 1을 더한 수를 제곱한수를 리턴
-
정수의 제곱이 아니면 -1 을 리턴
정도 될겁니다
그러면 우리는 먼저 제곱근 구하는 함수, 자료형 확인하는 함수, 자료형이 맞는지 확인해주는 함수 등을 생각하게 됩니다.
그 함수들은 각각 math.sqrt(), type(), isinstance() 입니다.
하지만 이 함수들을 단순히 사용하는 것으로는 답을 구하는 것이 쉽지 않을 것입니다.
왜 그럴까요?
여기서 잠깐!
당연한 이야기이지만 결과를 보기 전에 함수를 이용해서도 꼭! 시도하고 고민해 보시기 바랍니다.
그래야 실력이 늘게 됩니다.
이유는...
자료형을 확인하고 체크하는 함수는 알게 되었지만, 제곱근을 구하는 함수의 결괏값이 실수형이기 때문에, 별로 쓸모가 없습니다. 예를 들어 9의 제곱근을 구하면 3.0으로 나옵니다. 우리는 3.0이니 9의 제곱근은 정수라고 생각할 수 있지만, 컴퓨터는 3.0이므로 실수형이라 판단하죠.
때문에 3.0의 자료형이 아닌 값을 보고 판단해야 하는 것입니다.
이것을 판단하는 것이 이 문제의 핵심입니다.
어떻게 해야 할까요...
방법은 어떤 값이 정수인지 확인하는 방법은 원래 값과 정수로 바꾼 값이 같은지 확인하는 것입니다.
즉, 3.0과 int(3.0)의 값이 같으면 그 값은 정수 값인 것입니다.
이제 math.sqrt() 함수를 이용하여 문제를 해결할 수 있습니다.
결과코드
import math
def solution(n):
a=math.sqrt(n)
if int(a)==a:
return (a+1)**2
else:
return -1
하지만 저는 조금 다른 방법을 사용했습니다.
제곱근 만드는 함수를 사용하려고 math모듈을 import 하는 것이 귀찮아서 사용하는 방법인데, 제곱근은 1/2 제곱 값인 것을 이용해서 다음과 같이 표현할 수도 있습니다.
def solution(n):
a=n**0.5
if int(a)==a:
return (a+1)**2
else:
return -1
수고하셨습니다.
'파이썬 > 문제풀이' 카테고리의 다른 글
파이썬 - 프로그래머스 - 하샤드 수 (1) | 2020.08.05 |
---|---|
파이썬 - 프로그래머스 - 콜라츠 추측 (0) | 2020.08.03 |
파이썬 - 프로그래머스 - 문자열 내림차순으로 배치하기 (2) | 2020.07.28 |
파이썬 - 프로그래머스 - 정수 내림차순으로 배치하기 (0) | 2020.07.28 |
파이썬 - 프로그래머스 - 자연수 뒤집어 배열로 만들기 (0) | 2020.07.23 |