문제 설명

임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.

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

제한 사항

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

입출력 예

nreturn
121144
3-1

입출력 예 설명

입출력 예#1

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

입출력 예#2

3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다.


✍ SOLUTION1

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를 써주었다.

✍ SOLUTION2

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을 반환한다.
*/

출처 : 프로그래머스 스쿨 | 코딩테스트 연습

0개의 댓글