본문 바로가기
알고리즘 스터디/프로그래머스 스킬체크 레벨 1(끝)

[프로그래머스 스킬체크 레벨 1] 정수 제곱근 판별 문제 풀이 및 설명 - 자바스크립트[JAVASCRIPT]

by 레일라오리덕 2021. 4. 17.
728x90

programmers.co.kr/learn/courses/30/lessons/12934

 

코딩테스트 연습 - 정수 제곱근 판별

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

programmers.co.kr

문제

 

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

 

 

제한 사항

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

 

결괏값 예시

 

n return
121 144
3 -1

 

기본 제공 틀

 

function solution(n) {
    var answer = 0;
    return answer;
}

 

풀이 [JavaScript]

 

안녕하세요, 오늘은 정수 제곱근 판별 문제를 풀이해보도록 하겠습니다.

이번 문제에서의 중요한 핵심 포인트는 바로 제곱근을 구하는 메서드와 제곱을 해주는 메서드 그리고 마지막으로 정수를 체크해주는 메서드입니다.

 

우선 입력받아지는 값이 제곱근인지 아닌지 판별해주어야하는데요.

이렇게 주어진 숫자의 제곱근을 확인해주는 메서드는 Math.sqrt()라는 함수입니다.

 

Math.sqrt(number)에 판별할 숫자 number를 입력해주면 number의 제곱근 값이 나오게됩니다.

입력된 number가 2였을 경우엔 1.41421356...의 값이, 9라면 3이라는 값이 나오게됩니다.

그러므로 Math.sqrt(number)라는 값이 정수이면 입력된 값은 제곱근의 값이라고 판단할 수 있게됩니다.

 

이때, 주어진 값이 정수인지 판별하는 메서드는 Number.isInteger(number)라는 함수입니다.

이 함수에 number라는 값을 넣으면 이 값이 Integer인지 아닌지 확인해주고 리턴값은 true 혹은 false로 나오게됩니다.

 

그러므로 아래와 같이 if - else문에 적용하여 true일경우 answer값에서 1을 더하여 제곱하도록 아닐경우엔 문제에서 주어진 것과 같이 -1값을 return하도록 해주었습니다.

 

여기서 제곱을 구하는 메서드가 있는데요, 이는 Math.pow(value, exponent)라는 함수입니다.

value에는 제곱하고자 하는 값을 넣어주고, exponent에는 이 제곱을 몇번 실행할지를 입력해주면 됩니다.

우린 입력된 값에 +1을 하여 제곱을 해줄것이기 때문에, answer+1이라는 값과 2라는 값을 exponent에 입력해주었습니다.

 

이번 문제를 푸는 방법은 이렇게 메서드를 이용하는 방법도 있지만 알고리즘 공부를 위해 바빌로니아 방법으로 제곱근을 구하는 방법도 있습니다.

 

추가적으로 공부를 하실 분들께서는 이 방법에 대해 공부해보면 좋을 것 같습니다.

728x90

 

 

function solution(n) {
    var answer = Math.sqrt(n);
    if(Number.isInteger(answer)){
        return Math.pow(answer+1, 2);
    }else{
        return -1;
    }
}

 

채점 결과 [JavaScript]

 

728x90

댓글