본문 바로가기
Developer/Algorithm

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

by roqkfrlfhr 2020. 8. 21.

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

 

Programmers(프로그래머스)의 코딩테스트 연습문제 Level 1 중,

정수 제곱근 판별 문제를 JavaScript로 해결해 보도록 하겠습니다.

 

 

문제 설명

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

 

제한 사항

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

 

입출력 예

n return
121 144
3 -1

 

입출력 예 설명

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

입출력 예#2
3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다.

 

 

작성한 답

solution.js

function solution(n) {
    return Number.isInteger(Math.sqrt(n)) ? (Math.sqrt(n) + 1) ** 2 : -1;
}

 

설명

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

문제를 읽고 그대로 이해하고 그대로 코드를 순서대로 작성해 나가면 바로 답이 나오는 문제 입니다.

임의의 양의 정수 n에 대해 n이 어떤 양의 정수 x의 제곱인지 아닌지 판단한다는 말은 쉽게 말해 임의의 양의 정수 n의 제곱근이 정수인지를 판단한다는 말과 같습니다.

그렇기 때문에 먼저 Math.sqrt() 함수를 사용하여 임의의 양의 정수 n의 제곱근을 구하고,

Number.isInteger() 함수를 사용하여 임의의 양의 정수 n의 제곱근이 정수인지 아닌지를 판단합니다.

이까지만 했으면 이미 다 끝난 것입니다. 이미 판단은 끝났고 반환할 값은 정해져 있으니까요.

삼항 연산자를 사용하여,

만약 임의의 양의 정수 n의 제곱근이 정수라면 임의의 양의 정수 n의 제곱근에 1을 더하고 거듭제곱 연산자인 ** 를 사용하여 ** 2 로 제곱을 해준 값을 반환합니다. 첫번째 입출력 예와 같이 121의 제곱근인 11 은 양의 정수이므로 (11+1)^2가 되어 144가 반환 시켜줍니다.

만약 임의의 양의 정수 n의 제곱근이 정수가 아니라면 -1 을 무조건 반환해주면 됩니다. 두번째 입출력 예와 같이 3의 제곱근은 양의  정수가 아니므로 그냥 -1이 반환 시켜줍니다.

(너무 쉬운 문제이지만 혹시라도 장황한 설명이라 이해 못하신 분들께 죄송합니다.. 혹시라도 이해가 안되신다면 언제든지 말씀 해주시기 바랍니다!)

 

 

 

도움이 되셨다면 공감, 댓글 부탁드립니다!

궁금하신 점이나 요청 사항은 언제든지 말씀 해주세요!

 

감사합니다.


댓글