💡
Number.isIntager()
,Math.sqrt
,Math.pow ()
- n 이 x의 제곱과 같다.
- 그렇다면 (x + 1)을 제곱한 값 리턴
- 아니면 -1 리턴
function solution(n) { const answer = 0; if (n === x * x) { answer= (x + 1) + (x + 1) } else { answer = -1 } }
1.
function solution(n) {
let answer = -1;
for(let i=1; i*i <= n; i++){ // i*i(i의 제곱값이 n과 동일해질때까지)
if(i*i ===n){
// 제곱근을 찾은 경우
answer = i + 1;
return answer * answer
// 방법 1. return (i + 1)*(i + 1)
// 방법 2. return (i + 1) ** 2 -> 거듭제곱연산자! 앞 에는 제곱할 숫자, 뒤는 몇제곱 할건지 넣어주기
}
}
//제곱근을 찾지 못한 경우
return answer;
}
2. 메서드
소수점이 없는 정수라면 제곱근이 맞다. 소수점이 있다면 제곱근이 아니다.
Number.isIntager()
: 정수인지 아닌지 판단하는 메서드
인자값으로 들어오는 데이터가 정수인지 아닌지 불린타입으로 리턴해줌.Math.sqrt
: 해당 슷자가 제곱이라면 제곱근을 찾아서 변수에 담아주는 메서드Math.pow (sqrt + 1 , 2)
: 앞 인자를 뒤인자만큼 제곱하는 메서드
function solution(n) {
let sqrt = Math.sqrt (n);//해당 슷자가 제곱이라면 제곱근을 찾아서 변수에 담아주는 메서드
if(Number.isInteger(sqrt)){
// 정수인 경우 (제곱근이 있는 경우)
return (sqrt + 1) ** 2
// return Math.pow (sqrt + 1 , 2)-> 앞 인자를 뒤인자만큼 제곱하는 메서드
}else {
//정수가 아닌경우 (제곱근이 없는경우)
return -1
}
}
💡 정수를 판별하는 법은 Number.isInteger 메서드도 있지만,
나머지 연산자를 활용해도 좋을 것 같다. 정수는 1로 나누었을 때 항상 나머지가 0이므로, 아래처럼 써주기 가능!
if (sqrt % 1 === 0){
return (sqrt + 1) ** 2
}