임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
입출력 예
첫번째 작성 코드
function solution(x, n) {
if (x * x === n) {
return (x + 1) * (x + 1);
} else {
return -1;
}
}
// 애초에 n은 임의의 양의 정수이기 때문에 알 수 있는 인자가 아님
// for문을 사용하여 x*x를 n까지 돌려야 함
두번째 작성 코드
function solution(n) {
for (let x = 1; x * x <= n; x++) {
if (x * x === n) { // n이 121일 때 x=1이면 1*1이 121이 아니므로 바로 else로 빠짐
return (x + 1) * (x + 1);
} else {
return -1;
}
}
// 왜 안되는 거지.......
// +) 최근 배열 메소드를 많이 접하면서 for문에서도 return을 여러번 써버린듯
// +) return을 쓰면 함수가 종료되므로 돌지 않음
function solution(n) {
for (let x = 1; x * x <= n; x++) {
if (x * x == n) { // x*x가 n일 때까지 돌려줘
answer = (x + 1) * (x + 1);
} else answer = -1;
}
return answer; // x*x가 n이 안되면 -1 뱉어줘
}
// 내가 제출한 것과 어떤 차이가 있는지 모르겠다.. 튜터님께 설명을 들어봐야할듯
// +) 역시 모를 때는 튜터님께 질문하는 것이 최고다!
function solution(n) {
let x = Math.sqrt(n); // 제곱근을 구하는 메소드
if(x % 1 === 0 ) return (x+1) * (x+1) // 정수 확인
else return -1;
}
function solution(n) {
let x = Math.sqrt(n);
if (x % 1 !== 0) { // 나머지를 확인 : 제곱근이 아닐 경우
return -1;
} else {
return Math.pow(x + 1, 2); // 거듭제곱을 해주는 메소드
}
}
나는 익숙한 for문을 돌렸지만 제곱근을 구해주는 Math.sqrt를 사용하면 좀 더 직관적인 코드가 작성된다. 그리고 if else의 조건을 반대로도 설정해서 리턴 하는 것도 같이 살펴봤다. for문 그만 쓰고 얼른 다른 메소드랑도 친해져야지😃