[프로그래머스] 정수 제곱근 판별 in JavaScript

hyocho·2022년 6월 14일
0

코딩테스트

목록 보기
11/45


2022.07.05 수정

✅문제

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

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

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

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

💡주어진 솔루션

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

✍문제풀이

  1. 내가 처음에 썼던 코드
function solution(n){
  for(let x = 1; x*x>n; x++){
    if(x*x==n) return (x+1)*(x+1);
  }
  return -1;
}

/*
 x가 1부터 커지는 반복문을 돌면서 x제곱이 n이면 (x+1)의 제곱을 리턴해주고
아니면 -1을 리턴해주는 것으로 구현했다.
*/

몇 개의 테스트만 통과하고 대부분 실패였던 코드.

  1. 성공한 코드
function solution(n){
  for(let x = 1; x*x<=n; x++){
    if(x*x==n){
      answer = (x+1)*(x+1);
    }else
    answer = -1;
  }
  return answer;
}

위의 코드와 거의 비슷한데.. return (x+1)*(x+1) 로 해 준 부분이 다르다. 무슨 차이가 있는 건지는 아직까지 모르겠다 ㅠㅠ

function solution(n) {
    let x = Math.sqrt(n);
    if(x % 1 === 0 ) return (x+1) * (x+1)
    else return -1;
}

제곱근을 구해주는 내장 메서드를 사용한 코드.
근데 알고리즘 문제들은 최대한 내장메서드를 사용하지 않고 풀려고 한다.

✔️참고할 좋은 코드

function solution(n) {
    var answer = 0;
    let sqrt = Math.sqrt(n);
    if (sqrt % 1 !== 0) { // 나머지를 이용해 소숫점 판별, 제곱근이 아닐 경우
        answer = -1;
    } else {
        answer = Math.pow(sqrt+1,2); // 제곱근일 경우
    }
    return answer
}

정수 n의 제곱근을 구하고 제곱근일 경우, 제곱근이 아닐 경우를 조건으로 한다. 이 때 구분하는 조건은 나머지(%)를 사용한다.
제곱근일 경우, 제곱근에 +1을 한 제곱을 출력하고
제곱근이 아닐 경우, -1을 출력한다.

function solution(n) {
    // 삼항 연산자를 이용한 풀이
    return Math.sqrt(n) % 1 == 0 ? Math.pow(Math.sqrt(n)+1,2) : -1
}
function nextSquare(n){
  var result = 0;
  var x = 0;
  while (x*x < n)
    x++;
  if (x*x == n) {
    x++;
    result = x*x;
  } else {
    result = 'no'
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;
}

처음엔 나도 반복문을 이용하여 문제에 접근했으나 어째서인지 잘 풀리지 않았음..😢
내장함수를 사용하지 않고도 푸는 방법을 알아놓기.

📝TIL

  • Math.sqrt(x) : 숫자 x의 제곱근을 반환한다.
  • Math.pow(base, exponent) : base에 exponent를 제곱한 값을 반환한다.
  • 정수 판별법 : Javascript에서 나머지 연산자(%)는 두 수를 나누었을 때 나머지 값을 구해준다. 정수는 1로 나누었을 경우 항상 나머지가 0이 되는 속성을 이용해서 주어진 숫자가 정수인지 체크하는 방법

문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/12934

profile
기록하는 습관을 기르고 있습니다.

0개의 댓글