1. 문제
양의 정수 n을 매개변수로 하여 n의 제곱근을 찾는다. n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하시오.
2. 제한
n은 1이상, 50000000000000 이하인 양의 정수입니다.
3. 정답
class Solution {
public long solution(long n) {
long answer = 0;
for (long i = 1; i*i <= n; i++) {
if (i * i == n) {
answer = (i + 1) * (i + 1);
}
}
if (answer == 0) {
answer = -1;
}
return answer;
}
}
4. 설명
4-1. for문을 사용하여 1부터 하나씩 증가시켜나가며 n의 제곱근을 구한다. 범위는 숫자의 제곱이 n보다 작거나 같을때까지 반복문을 돌린다.
4-2. for문을 통해 제곱근을 찾았다면 1을 더해주고 그 값의 제곱값을 return한다.
4-3. for문을 돌렸지만 제곱근을 찾지 못했다면 -1을 return한다.
5. 참고
5-1. n이 50000000000000까지 될 수 있기 때문에 for문에서 i * i 값이 엄청나게 커질 가능성이 높다. 따라서 i도 int형이 아닌 long형으로 선언하였다.
5-2. 제곱근을 구하는 함수 sqrt()가 존재하는지 모르고 직접 만들어서 풀었다. 정답이긴 하지만 시간효율 측면에서는 sqrt()함수를 쓰는 것이 훨씬 빠르다.
class Solution {
public long solution(long n) {
long answer = 0;
double square_root;
square_root = Math.sqrt(n);
if (square_root % 1 == 0) {
answer = (long)((square_root + 1) * (square_root + 1));
}
else {
answer = -1;
}
return answer;
}
}
5-3. 제곱을 구하는 함수 pow()도 있긴 하지만 지금 문제에서는 굳이 직접 계산하는 것과 차이는 없을 것으로 보여 사용하지 않았다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
콜라츠 추측(JAVA) (0) | 2022.01.19 |
---|---|
제일 작은 수 제거하기(JAVA) (0) | 2022.01.19 |
정수 내림차순으로 배치하기(JAVA) (0) | 2022.01.19 |
자연수 뒤집어 배열로 만들기(JAVA) (0) | 2022.01.18 |
자릿수 더하기(JAVA) (0) | 2022.01.18 |