(JS) 정수 제곱근 판별

호두파파·2021년 2월 5일
0

메모

목록 보기
11/18

문제 설명

임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.

제한 사항

  • n은 1이상, 50000000000000 이하인 양의 정수입니다.

입출력 예

  • 입출력 예#1
    121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 리턴합니다.

  • 입출력 예#2
    3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다.

문제풀이

문제의 핵심은 파라메터로 제공된 n을 판별하는 조건문을 사용해야 한다는 점이다. 처음에는 x를 판별하기 위해 for문을 순회해 x값을 도출하려했다. 하지만, 이러한 경우 for문이 순차적으로 돌면서 첫 번째 조건을 쉽게 도출할 수 있지만, 두번째 조건을 도출하려면 얼리 리턴되버리는 문제를 가지고 있었다.

그래서 새롭게 생각한 풀이 방법은 차근차근 제곱의 수를 구하는 것이다. Math.sqrt()를 이용해 제곱된 수 x를 정의하고, 이 수를 다시 정수로 만들어주는 메소드는 Math.floor를 사용했다. 다음은 첫번째 방식과 같은 방법으로 조건문을 사용해서 문제를 해결했다.

function solution(n) {
    let x = Math.floor(Math.sqrt(n));
    let trueNum = Math.pow([x],[2]);
    
    if(n === trueNum) {
        return Math.pow([x+1],[2]);
    } else {
        return -1;
    }  
}

다른 문제 풀이

function nextSqaure(n){
    var result = 0;
    var n = Math.sqrt(n);
    result = Number.isInteger(n) ? Math.pow(n+1, 2) : 'no';
    return result;
}

정수 판별식 메소드는 isInteger를 사용한 점이 인상 깊었다. 삼항 연산자를 사용하니 코드가 깔끔하게 구분이 된다.


profile
안녕하세요 주니어 프론트엔드 개발자 양윤성입니다.

0개의 댓글