본문 바로가기

카테고리 없음

[Code Kata] 정수 제곱근 판별 - JavaScript

 

2024년 05월 14일

프로그래머스 코드카타 16번문제 - 정수 제곱근 판별

https://school.programmers.co.kr/learn/courses/30/lessons/12934

 

 

✅문제문제설명

임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.

n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.

  • 제한사항

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

  • 입출력 예 1

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

  • 입출력 예 2

3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다.

 

 

✍문제풀이

  1. 처음 시도한 코드
function solution(n) {
  let answer = 0;
  for (let x = 1; x * x > n; x++) {
    if (x * x == n) {
      answer = x + 1;
    }
    answer = x - 1;
  }

  return answer;
}

console.log(solution(121));
 

해설 / 잡설

처음 의도한 건 for 문을 돌려 x * x가 입력받은 매개변수 n이 되도록 하였다.

그리고, x * x 가 매개변수 n과 정확히 일치할 경우 해당 x의 값에 +1을 해서 answer에 할당하도록 하였으나 작동하지 않았다. 이유는 부등호의 방향이 잘못되었다.

>로 되어있는 것을 <= 로 하여 작거나 같다로 바꿔주고 if문 밖에서 answer 에 -1을 할당 하는 것을 삭제하니 정상적으로 12가 출력되었다.

 

 

2. 수정 / 성공한 코드

function solution(n) {
  let answer = -1;
  for (let x = 1; x * x <= n; x++) {
    if (x * x == n) {
      answer = (x + 1) * (x + 1);
      break;
    }
  }
  return answer;
}

console.log(solution(3));
 

해설 / 잡설

등호의 위치를 바꿔줬고, 찾아낸 X에 +1을 하여 제곱하여 리턴하는 로직을 작성했다.

그리고, 어떠한 정수 n이 x의 제곱이 아닐경우 -1을 린턴하고자 했는데 그럴 필요 없이 break 를 걸고, 최초 answer 를 변수로 지정할 때 -1을 주면 되었던 것이다.

 

 

✔️참고할 좋은 코드

내용을 입력하세요.
 

해설 / 잡설

 

 

📝TIL

내장함수 Math.sqrt(x) Math.pow(base, exponent) 또는 정수 판별법 이라는 방법이 있는 모양이다.

다른사람의 풀이가 전혀 이해되지 않는다. 조금 더 스터디가 필요할 듯!