[프로그래머스] 정수 제곱근 판별 - Javascript

문제 링크

문제

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

nreturn
121144
3-1

풀이

정수 n이 제곱이면 n의 제곱근+1의 제곱을 반환한다.
만약 제곱이 아니라면 -1을 반환한다.

121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 반환한다.

제곱에 관련된 메서드를 활용해보자.

  • Math.sqrt(x) : 숫자 x의 제곱근을 반환한다. 더 알아보기
  • Math.pow(base, exponent) : base에 exponent를 제곱한 값을 반환한다. 더 알아보기
  1. 정수 n의 제곱근을 구하고 제곱근일 경우, 제곱근이 아닐 경우를 조건으로 한다. 이 때 구분하는 조건은 나머지(%)를 사용한다.
  2. 제곱근일 경우, 제곱근에 +1을 한 제곱을 출력하고
  3. 제곱근이 아닐 경우, -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
}

메서드를 활용하면 간단한 if문으로 해결할 수 있는 문제다.
가독성을 높이기 위해 삼항연산자를 사용해 풀어보았다.

function solution(n) {
    // 삼항 연산자를 이용한 풀이
    return Math.sqrt(n) % 1 == 0 ? Math.pow(Math.sqrt(n)+1,2) : -1
}

삼항연산자를 사용하면 코드가 눈에 띄게 줄어들어 깔끔하게 보여지는 것을 확인할 수 있다.


Takeaway

무조건 코드를 간결하게 쓴다고 좋은 코드일 순 없다라고 한다. 나는 코드를 무조건 짧고 간결하게 적기 보단 누구나 이해하기 쉬운 가독성이며, 의도가 명확하고, 성능적으로 좋아야 좋은 코드라고 생각한다. 앞으로도 좋은 코드에 대해 깊이 고민하기 위해 여러가지의 코드를 보면서 공부하자!
알고리즘은 정해진 답이 없다!

좋은 웹페이지 즐겨찾기