자바스크립트 정수 제곱근 판별 - jabaseukeulibteu jeongsu jegobgeun panbyeol

문제 링크

문제

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

nreturn
121 144
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

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

문제설명

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

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

주의사항

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

입출력예시

자바스크립트 정수 제곱근 판별 - jabaseukeulibteu jeongsu jegobgeun panbyeol

코드

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

해석

이번 문제를 풀면서 두가지 검색을 했다. 

1. Math.sqrt() : 제곱근을 구해주는 math메소드

2. 정수인지 아닌지를 체크하는 방법 

정수를 판별하는 방법은 2가지가 있다.

1) Number.inInteger() 함수는 파라미터로 입력받은 값이 정수인지 판단한다.

  가장 간단하게, 데이터가 정수인지 판단할 수 있는 방법

2) Javascript에서 나머지 연산자(%)는 두 수를 나누었을 때 나머지 값을 구해준다.

 정수는 1로 나누었을 경우 항상 나머지가 0이 되는 속성을 이용해서 주어진 숫자가 정수인지 체크하는 방법

한줄평

구글 검색으로 문제를 풀었다.

어떻게 제곱근을 구할지, 어떻게 정수를 페크할지

문제를 차근차근 나눠서 생각해보자

링크

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

문제 설명

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

제한 조건

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

초기 코드

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

코드 풀이 설명

function solution(n) {
    let answer = 0;
    let num = Math.sqrt(n)
    
    // num이 정수인지를 판별하려면 정수의 성질 중 1로 나누었을 때 나머지가 0
    if (num % 1 === 0) {
        answer += Math.pow(num+1, 2)
    } else {
        return -1
    }
    return answer;
}
  • 먼저 n이 어떤수의 제곱인지를 확인하기 위해 num이라는 변수에 n의 제곱근 값을 넣어준다.
  • 그 후에 만약 n의 제곱근이 정수이면 num + 1 의 제곱만큼의 값을 더해준다.
  • 그렇지 않으면 -1을 리턴한다.

자바스크립트 제곱근과 거듭제곱

// 제곱근 구하기
Math.sqrt(대상 숫자);
Math.sqrt(121) // 11

// 거듭제곱 하기
Math.pow( 대상 숫자, 거듭제곱 횟수 );
Math.pow( 3, 2 ) // 9
  • 자바스크립트 제곱근을 구하는 함수는 Math.sqrt() 이고 거듭제곱을 하는 함수는 Math.pow() 이다.

자바스크립트 정수 판별하기

// Number.isInteger() 매소드 사용
Number.isInteger(1) // true
Number.isInteger(-144) // true
Number.isInteger(hello) // false
Number.isInteger(true) // false
Number.isInteger(0.05) // false

// 나머지 연산자 활용
number % 1 === 0
  • 자바스크립트에서 정수인지 아닌지를 판별하는 함수로는 isInteger() 매서드가 있는데 () 안에 들어있는 것에 따라 정수일 땐 true, 정수가 아닐 땐 false를 반환한다.
  • 두번째로는 나머지 연산자를 활용하는 방법이 있는데 정수는 1로 나누었을 때 나머지가 항상 0이 된다는 속성을 이용하여 주어진 숫자가 정수인지를 판별한다.

프로그래머스 코딩테스트 연습 - 정수 제곱근 판별

코딩테스트 연습 - 정수 제곱근 판별

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

programmers.co.kr

자바스크립트 정수 제곱근 판별 - jabaseukeulibteu jeongsu jegobgeun panbyeol

프로그래머스 코딩테스트 연습 - 다른 문제 풀이(자바스크립트)

[코딩테스트 연습] 자연수 뒤집어 배열로 만들기 자바스크립트 풀이

문제 설명 자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를 들면 n이 12345일 경우 [5,4,3,2,1]을 리턴합니다. 제한 조건 n은 10,000,000,000이하인 자연수입니다. 초기

choijying21.tistory.com

자바스크립트 정수 제곱근 판별 - jabaseukeulibteu jeongsu jegobgeun panbyeol

[코딩테스트 연습] 정수 내림차순으로 배치하기 자바스크립트 풀이

문제 설명 함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다. 제한 조

choijying21.tistory.com

자바스크립트 정수 제곱근 판별 - jabaseukeulibteu jeongsu jegobgeun panbyeol