개발일기
정수 제곱근 판별 본문
-
정수 제곱근 판별
문제 설명
입출력 예 설명
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
- n은 1이상, 50000000000000 이하인 양의 정수입니다.
121 | 144 |
3 | -1 |
입출력 예#1
121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 리턴합니다.
입출력 예#2
3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다.
1. 주어진 숫자 n을 루트를 씌어주어 구한다.
2. 루트를 씌운 값을 소수점 자리수까지 버려주어 Int 나, long형 자료형으로 만들어준다.
3. 해당 숫자를 제곱한 값이 정상적으로 값이 구해지는지 구한다.
4. 제곱한 값이 같다면 해당 숫자에서 +1한 값을 제곱으로 구해준다.
import java.util.*;
import java.lang.*;
class Solution {
public long solution(long n) {
long answer = 0;
long m = (long)Math.sqrt(n);
boolean flag = false;
if(n==m*m){
flag = true;
}
if(flag){
answer = (m+1) * (m+1);
} else {
answer = -1;
}
return answer;
}
}
내가 풀이한 값이다. 조금 라인이 길고 별로인거 같다.. 조금 더 앞으로는 코드를 깔끔하게 작성할 수 있는 방법이 없는지에 대해 고민을 하며 문제를 풀어야 겠다.
class Soultion {
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;
}
}
sqrt 제곱근을 int형으로 바꿔주어 Math.pow로 2를 해주어 제곱근을 구한 후, n과 비교해주어 같으면 if문 안에를 다르면 if문 밖으로 튕겨나간다. 그 후에 Math.sqrt(n) + 1 를 제곱해준 후, long타입으로 변환해준 모습이다.
내가 원했던 코드가 이거였고 Math.pow라는 함수가 있었던것을 알았지만, 해당 문제를 풀때, 생각하지 못하여.. 난잡해졌다. ㅠ
'Algorithm' 카테고리의 다른 글
프로그래머스 숫자 짝꿍 (1) | 2023.12.26 |
---|---|
정수 내리차순으로 배치하기 (0) | 2023.12.23 |
문자열 내 p와 y의 개수 (1) | 2023.12.17 |
나머지가 1이 되는 수 찾기 (0) | 2023.12.17 |
평균구하기 (0) | 2023.12.17 |