Lv. 1 - 정수 제곱근 판별 풀이과정
문제 설명
임의의 양의 정수 n
에 대해, n
이 어떤 양의 정수 x
의 제곱인지 아닌지 판단하려 합니다.
n
이 양의 정수 x
의 제곱이라면 x+1
의 제곱을 리턴하고, n
이 양의 정수 x
의 제곱이 아니라면 -1
을 리턴하는 함수를 완성하세요.
제한사항
-
n
은 1이상, 50000000000000 이하인 양의 정수입니다.
입출력 예
N | return |
---|---|
121 | 144 |
3 | -1 |
입출력 예 설명
3-1) 입출력 예 설명 #1
121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 리턴합니다.
3-2) 입출력 예 설명 #2
3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다.
프로그래머스에서 제공한 코드
처음 프로그래머스에서 작성된 코드는 아래와 같다.
function solution(n) {
var answer = 0;
return answer;
}
문제 풀이
const solution = (n) => {
for (let x = 0; x * x <= n; x++) {
if (x * x === n) return (x + 1) * (x + 1);
}
return -1;
};
함수 선언
- 화살표 함수를 사용하여
n
매개변수를 받는다.
풀이
- 먼저 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
을 작성했다.
결과 반환
- n이 121 경우 121은 11의 제곱으로
(11 + 1) * (11 + 1)
울 리턴하여 144을 반환한다. - n이 3일 경우 3은 양의 정수의 제곱이 아니여서 -1을 반환한다
실행
-
console.log(solution(121))
실행하면 144가 출력된다. -
console.log(solution(3))
실행하면 -1가 출력된다.
다른 사람의 풀이 참고
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;
}
링크
- 문제 링크: 문제 링크
- Git: rarrit github
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges