[프로그래머스] Lv.1 정수 제곱근 판별 (JS)

아름·2023년 11월 15일
0

알고리즘

목록 보기
6/26
post-custom-banner

🔎 문제

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

입출력 예


🔓 풀이 과정

고민

첫번째 작성 코드
function solution(x, n) {
  if (x * x === n) {
    return (x + 1) * (x + 1);
  } else {
    return -1;
  }
}
// 애초에 n은 임의의 양의 정수이기 때문에 알 수 있는 인자가 아님
// for문을 사용하여 x*x를 n까지 돌려야 함
두번째 작성 코드
function solution(n) {
  for (let x = 1; x * x <= n; x++) {
    if (x * x === n) {  // n이 121일 때 x=1이면 1*1이 121이 아니므로 바로 else로 빠짐
      return (x + 1) * (x + 1);
    } else {
      return -1;
    }
  }
// 왜 안되는 거지.......
// +) 최근 배열 메소드를 많이 접하면서 for문에서도 return을 여러번 써버린듯
// +) return을 쓰면 함수가 종료되므로 돌지 않음

나의 풀이

function solution(n) {
  for (let x = 1; x * x <= n; x++) {
    if (x * x == n) { // x*x가 n일 때까지 돌려줘
      answer = (x + 1) * (x + 1);
    } else answer = -1;
  }
  return answer; // x*x가 n이 안되면 -1 뱉어줘
}
// 내가 제출한 것과 어떤 차이가 있는지 모르겠다.. 튜터님께 설명을 들어봐야할듯
// +) 역시 모를 때는 튜터님께 질문하는 것이 최고다!

그 밖의 풀이

function solution(n) {
    let x = Math.sqrt(n); // 제곱근을 구하는 메소드
    if(x % 1 === 0 ) return (x+1) * (x+1) // 정수 확인
    else return -1;
}
function solution(n) {
  let x = Math.sqrt(n);
  if (x % 1 !== 0) { // 나머지를 확인 : 제곱근이 아닐 경우
    return -1;
  } else {
    return Math.pow(x + 1, 2); // 거듭제곱을 해주는 메소드
  }
}

나는 익숙한 for문을 돌렸지만 제곱근을 구해주는 Math.sqrt를 사용하면 좀 더 직관적인 코드가 작성된다. 그리고 if else의 조건을 반대로도 설정해서 리턴 하는 것도 같이 살펴봤다. for문 그만 쓰고 얼른 다른 메소드랑도 친해져야지😃

profile
내 꿈은 개발자
post-custom-banner

0개의 댓글