임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
n | return |
---|---|
121 | 144 |
3 | -1 |
입출력 예#1
121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 리턴합니다.
입출력 예#2
3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다.
const solution = (n) => !(Math.sqrt(n)%1)? (Math.sqrt(n)+1)**2 : -1;
/*
내가 처음 작성한 코드이다.
1. Math.sqrt를 사용하여 제곱근을 구해준 후 나머지 연산자를 사용하여 정수인지 판별해준다.
2. 1로 나누었을때 0이라면 정수고, 0이 아니라면 실수이다.
3. 삼항 연산자를 사용하여 true면 n의 제곱근에 1을 더한 후 제곱을 해주고, false라면 -1을 반환해준다.
*/
const solution = (n) => !(Math.sqrt(n)%1)? Math.pow((Math.sqrt(n)+1),2) : -1;
// 위의 코드에서 Math.pow를 써주었다.
const solution = (n) => {
switch(n % Math.sqrt(n)){
case 0:
return Math.pow(Math.sqrt(n) + 1, 2);
default:
return -1;
}
}
/*
switch를 사용하여 코드를 작성해보았다.
1. Math.sqrt를 사용하여 n의 제곱근을 구한 후, 그 값으로 n을 나눈 나머지(% Math.sqrt(n))를 계산한다.
2. case 0:: 만약 (n % Math.sqrt(n))의 결과가 0이라면, 이 case 블록 내부의 코드가 실행된다.
3. 여기서 (Math.sqrt(n)+1)은 주어진 수의 제곱근에 1을 더한 값이다.
이 값을 다시 제곱(Math.pow(..., 2))하여 반환한다.
4. 만약 (n % Math.sqrt(n))의 결과가 0이 아니라면, default case가 실행된다.
5. switch 문에서 어떤 case도 일치하지 않으면 default case가 실행되어 -1을 반환한다.
*/