코딩테스트/프로그래머스

[코딩테스트 입문] Day 18 제곱수 판별하기 (JavaScript)

Kim Minki 2023. 2. 15. 16:58

제곱수 판별하기

문제 설명

어떤 자연수를 제곱했을 때 나오는 정수를 제곱수라고 합니다. 정수 n이 매개변수로 주어질 때, n이 제곱수라면 1을 아니라면 2를 return하도록 solution 함수를 완성해주세요.

제한사항

  • 1 ≤ n ≤ 1,000,000

입출력 예

n result
144 1
976 2

입출력 예 설명

입출력 예 #1

  • 144는 12의 제곱이므로 제곱수입니다. 따라서 1을 return합니다.

입출력 예 #2

  • 976은 제곱수가 아닙니다. 따라서 2를 return합니다.

나의 풀이

function solution(n) {
    let count = 0;
    for(let i = 1; i <= n; i++){
        if(n%i === 0){
            count += 1;
        }
    }
    let answer;
    if(count%2 === 1){
        answer = 1;
    }
    else answer = 2;
    return answer;
}
  • 나의 처음 풀이에 대한 아이디어는 먼저 n의 약수 개수를 구하고, 약수 개수가 홀수이면 n이 제곱수이고, 짝수이면 n이 제곱수가 아닐 것이란 생각
  • 이를 위해 for 문을 이용해 1부터 n까지의 수로 n을 차례대로 나누어 0으로 나누어 떨어질 경우 그 수를 n의 약수로 생각하고, 약수의 개수를 저장하는 변수 count의 값을 1씩 증가시킨다.
  • 그리고 약수의 개수가 저장된 변수 count의 값이 홀수이면 1을, 짝수이면 2를 반환한다.

다른 풀이

function solution(n) {
    const answer = Number.isInteger(Math.sqrt(n)) ? 1:2;
    return answer;
}
  • Math.sqrt()메서드로 매개변수에 루트를 씌워 제곱근을 구하고, Number.isInteger()메서드로 제곱근이 정수인지 판별해 n이 제곱수인지 아닌지 판단하는 방법
  • 이렇게 메서드를 적절히 활용하면 식이 매우 간단해 지더라...🙃