728x90
문제 설명 :
임의의 양의 정수 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을 리턴합니다.
class Solution {
public long solution(long n) {
double a = Math.sqrt(n);
long answer = (long)a;
if((answer)*(answer) == n){
answer = (answer + 1)*(answer + 1);
} else{
answer = -1;
}
return answer;
}
}
알고리즘 풀이 :
1. 숫자 n의 제곱근이 정수인지 판별하기 위해 Math 함수의 sqrt를 사용
- sqrt를 하게 된다면 실수형으로 저장 되기 때문에 double을 사용해서 a라는 변수를 생성
2. 반환하기 위한 answer 변수를 long으로 선언하고 a를 형을 맞추기 위해 (long)을 사용해 형변환을 하고 저장
3. sqrt를 사용한 answer * answer이 n 인지 판단 하는 if 문을 사용
1) answer * answer == n
- n+1의 제곱을 리턴해야하기에 (answer+1)*(answer+1)을 answer에 대입
2) answer * answer != n
- answer이 n의 제곱근이 아닐 때는 -1을 반환 시켜줘야하기에 answer에 -1을 대입
4. return을 사용해 answer을 반환
728x90
'프로그래머스 > level1' 카테고리의 다른 글
[Java][프로그래머스] 예산 (0) | 2020.09.22 |
---|---|
[Java][프로그래머스] 자릿수 더하기 (0) | 2020.09.22 |
[Java][프로그래머스] 핸드폰 번호 가리기 (0) | 2020.09.17 |
[Java][프로그래머스] 문자열을 정수로 바꾸기 (1) | 2020.09.07 |
[Java][프로그래머스] 소수 찾기 (0) | 2020.09.07 |