![](https://blog.kakaocdn.net/dn/2mUSH/btsHng9ep9L/PL5OA8b4P7jnvsWzeqTYy0/img.jpg)
2024년 05월 14일
프로그래머스 코드카타 16번문제 - 정수 제곱근 판별
https://school.programmers.co.kr/learn/courses/30/lessons/12934
✅문제문제설명
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
- 제한사항
n은 1이상, 50000000000000 이하인 양의 정수입니다.
- 입출력 예 1
121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 리턴합니다.
- 입출력 예 2
3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다.
✍문제풀이
- 처음 시도한 코드
function solution(n) {
let answer = 0;
for (let x = 1; x * x > n; x++) {
if (x * x == n) {
answer = x + 1;
}
answer = x - 1;
}
return answer;
}
console.log(solution(121));
해설 / 잡설
처음 의도한 건 for 문을 돌려 x * x가 입력받은 매개변수 n이 되도록 하였다.
그리고, x * x 가 매개변수 n과 정확히 일치할 경우 해당 x의 값에 +1을 해서 answer에 할당하도록 하였으나 작동하지 않았다. 이유는 부등호의 방향이 잘못되었다.
>로 되어있는 것을 <= 로 하여 작거나 같다로 바꿔주고 if문 밖에서 answer 에 -1을 할당 하는 것을 삭제하니 정상적으로 12가 출력되었다.
2. 수정 / 성공한 코드
function solution(n) {
let answer = -1;
for (let x = 1; x * x <= n; x++) {
if (x * x == n) {
answer = (x + 1) * (x + 1);
break;
}
}
return answer;
}
console.log(solution(3));
해설 / 잡설
등호의 위치를 바꿔줬고, 찾아낸 X에 +1을 하여 제곱하여 리턴하는 로직을 작성했다.
그리고, 어떠한 정수 n이 x의 제곱이 아닐경우 -1을 린턴하고자 했는데 그럴 필요 없이 break 를 걸고, 최초 answer 를 변수로 지정할 때 -1을 주면 되었던 것이다.
✔️참고할 좋은 코드
내용을 입력하세요.
해설 / 잡설
📝TIL
내장함수 Math.sqrt(x) Math.pow(base, exponent) 또는 정수 판별법 이라는 방법이 있는 모양이다.
다른사람의 풀이가 전혀 이해되지 않는다. 조금 더 스터디가 필요할 듯!