Algorithm
[프로그래머스] 연습문제 (정수 제곱근 판별)
펭귄코기
2022. 9. 26. 01:21
문제 설명
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요
제한 조건
n 은 1이상, 50000000000000 이하인 양의 정수입니다
입출력 예시
n | return |
121 | 144 |
3 | -1 |
나만의 해설
처음에 스스로 풀어내지 못했다 그래서 다른 팀원의 설명을 듣고 이해한 내용을 설명하겠다
일단 임시로 a라는 변수를 0 으로 초기화 시켜놓고
while문을 도는데 입력받는 n 까지 돌게 한다
그 밑에서 a++해서 a값을 계속 증가시켜주는데 그 이유는
if문에서 a*a 했을때 n과 같은지를 찾아내고
같다면 a를 +1해서 제곱해서 answer에 담아주는 식으로 해주고
아니라면 -1을 넣어주도록 해줬다
메서드를 사용하지 않고 제곱이되는 수인지 아닌지를 수동적으로 확인하기 좋은 코드인거 같다
하지만 이렇게 했을때 시간초과가 나온다 그래서 인터넷에 메서드를 사용한 방법을 써봤다
처음에 x라는 변수에 Math.sqrt() 를 이용해서 double로 만들어주고
그 값이 x.intValue()랑 같냐고 했을때 정수면 같다고 나올것이고
소수면 틀리다고 나올것이다
즉 121이 들어오면 x 는 11.0 이고 intValue하면 11 이니까 둘은 같다고 되는거고
3이 들어오면 x는 1.73205080 등 이고 intValue하면 1이니까 둘은 다르다고 되는거다
그래서 같으면 Math.pow를 이용해서 거듭 제곱을 만들어주고
answer가 long 타입이니 형변환해서 반환해준다
public class Solution {
public static void main(String[] args) {
long answer = 0;
long n = 3;
Double x = Math.sqrt(n);
if(x == x.intValue()){
answer = (long)Math.pow(x+1 , 2);
}else{
answer = -1;
}
System.out.println(answer);
}
}