:ledger: 문제 설명

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

:one: 제한사항

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

:two: 입출력 예

N return
121 144
3 -1

:three: 입출력 예 설명

:pushpin: 3-1) 입출력 예 설명 #1

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

:pushpin: 3-2) 입출력 예 설명 #2

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

:four: 프로그래머스에서 제공한 코드

처음 프로그래머스에서 작성된 코드는 아래와 같다.

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

:ledger: 문제 풀이

const solution = (n) => {
  for (let x = 0; x * x <= n; x++) {
    if (x * x === n) return (x + 1) * (x + 1);
  }
  return -1;
};

:one: 함수 선언

  • 화살표 함수를 사용하여 n 매개변수를 받는다.

:two: 풀이

  • 먼저 n에 값이 들어올 때 n은 x의 제곱인 식을 만들어주기 위해 반복문을 사용한다. let x = 0; x * x <= n; x++
  • 그리고 제곱인 지 확인하기 위해 if문을 사용하여 (x * x === n)을 해준다.
  • 위의 식이 맞을 경우 x + 1의 제곱을 리턴해주기 위해 return (x + 1) * (x + 1)을 작성했다.
  • 마지막으로 n이 양의 정수 x의 제곱이 안걸 리턴해주기위해 반복문 아래에 return -1을 작성했다.

:three: 결과 반환

  • n이 121 경우 121은 11의 제곱으로 (11 + 1) * (11 + 1)울 리턴하여 144을 반환한다.
  • n이 3일 경우 3은 양의 정수의 제곱이 아니여서 -1을 반환한다

:four: 실행

  • console.log(solution(121)) 실행하면 144가 출력된다.
  • console.log(solution(3)) 실행하면 -1가 출력된다.

:fire: 다른 사람의 풀이 참고

while문으로 x의 제곱은 n보다 작을 때 까지 반복하며 if문으로 x의 제곱이 n이랑 같을 때 x를 1식 증가시켜준 후 result 변수에 담아주었다.

// [20명] while문과 if,else문을 사용한 문제 풀이
function nextSqaure(n) {
  var result = 0;
  var x = 0;
  while (x * x < n) {
    x++;
  }
  if (x * x == n) {
    x++;
    result = x * x;
  } else {
    result = "no";
  }
  return result;
}

출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges