1차 공부/알고리즘

정수 제곱근 판별

공대탈출 2022. 11. 23. 17:28
문제 설명
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.

 

제한 조건
n은 1이상, 50000000000000 이하인 양의 정수입니다.

 

 

function solution(n) {
    var answer = 0;
    //sqrt-루트 / isInteger-정수인지 판별
    if (Number.isInteger(Math.sqrt(n))) {       //입력값의 제곱근이 정수인지 판별해 정수이면 진행
        answer = (Math.sqrt(n)+1)*(Math.sqrt(n)+1)  //(제곱근+1)의 제곱값을 반환
    } else {    //제곱근이 정수가 아닐때
        answer = -1 //-1반환
    }
    return answer;
}

이 문제는 제곱근을 구하는 메소드를 알아야 풀 수 있었다.

난 몰라서 Math mdn을 찾아봤고 sqrt()라는 메소드를 알게되어 사용했다.

 

 

 

다른사람의 풀이 중 제곱근 메소드를 사용하지 않은 게 있어 가져와 보았다.

function solution(n) {
    var answer = 0;

    for(let i=0, a=0; i<=n; i++){
      if(n/i===i){
        a = i + 1
        return a*a
      } else {
        answer = -1
      }
    }

    return answer;
}

for문을 0부터 n까지 돌려서 n / i === i인것 즉, 0~n사이에 제곱근이 있는지를 판별해

(i+1)을 제곱한 것을 반환하는 형태로 풀이했다.

 

또한 만약 0~n까지 n의 제곱근이 없다면 -1을 반환하도록 풀이하였다.

'1차 공부 > 알고리즘' 카테고리의 다른 글

콜라츠추측  (0) 2022.11.23
제일 작은 수 제거하기  (0) 2022.11.23
정수 내림차순으로 배치하기  (0) 2022.11.23
자연수 뒤집어 배열로 만들기  (0) 2022.11.23
자릿수 더하기  (0) 2022.11.23