반응형
정수 제곱근 판별
문제 설명
임의의 양의 정수 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을 리턴합니다.

문제 접근 방식
Math에서 제공하는 제곱근 관련 함수를 사용하려고 했습니다.
Math.Sqrt( )
- java.lang.Math클래스의 메소드
- 인수를 전달하면 인수에 대한 제곱근 값을 리턴
- Math 클래스가 제공하는 메소드는 모두 정적이므로 Import나 Math클래스 선언 없이 바로 사용 가능
class Solution {
public long solution(long n) {
long answer = 0;
if(Math.sqrt(n) % 1 == 0) {
answer = (long)((Math.sqrt(n)+1) * (Math.sqrt(n)+1));
} else {
answer = -1;
}
return answer;
}
}

문제 풀이
Math.sqrt() 함수를 사용해서 풀이했습니다.
n의 제곱근이 자연수인지 판별하기 위해 Math.sqrt(n) % 1 == 0 연산을 해서 자연수가 아닌 경우에는 -1을 return 했습니다.
최종 결과로 (n+1) 제곱을 return 해주기 위해 (long)((Math.sqrt(n)+1) * (Math.sqrt(n)+1)) 연산을 사용했습니다.

고수의 풀이
저는 Math의 sqrt() 메소드만 사용했지만, Math에서 제공하는 pow() 연산을 사용하면 더 간결해질 수 있는 것 같습니다.
Math.pow( )
- java.lang.Math 클래스의 pow( ) 메소드
- pow는 power의 거듭제곱을 의미
- pow는 전달된 인자의 제곱연산을 수행
class Solution {
public long solution(long n) {
if (Math.pow((int)Math.sqrt(n), 2) == n) {
return (long) Math.pow(Math.sqrt(n) + 1, 2);
}
return -1;
}
}
출처 : https://programmers.co.kr/learn/courses/30/lessons/12934
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
반응형
'알고리즘 연습 > Lv.1' 카테고리의 다른 글
[ 프로그래머스 ] 약수의 합 JAVA (0) | 2020.08.01 |
---|---|
[ 프로그래머스 ] 자릿수 더하기 JAVA (0) | 2020.05.04 |
[ 프로그래머스 ] 짝수와 홀수 JAVA (0) | 2020.05.04 |
[ 프로그래머스 ] 평균구하기 JAVA (0) | 2020.05.04 |