반응형
문제
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
제한사항
- n은 1이상, 50000000000000 이하인 양의 정수입니다.
입출력예
| n | return |
| 121 | 144 |
| 3 | -1 |
- 121 은 양의정수 11의 제곱이므로, (11+1)을 제곱한 144 리턴
- 3은 양의정수의 제곱이 아니므로 -1 리턴
풀이
function solution(n) {
var answer = 0;
if(0 < n && n < 50000000000000 ){
for(let i=1; i<=n; i++){
if(i*i == n){
return (i+1)*(i+1);
}
}
return -1;
}
}
console.log(solution(121))
- 물론 이거도 맞지만 for문의 조건대로 let i=1; i<=n; i++ 이렇게 돌리면 굉장히 비효율적이다.
- 121이라면, 11*11 까지만 찾으면 되는데 121까지 반복하기때문에 i*i <=n 까지만 확인하면 된다.
function solution(n) {
var answer = 0;
if(0 < n && n < 50000000000000 ){
for(let i=1; i*i<=n; i++){
if(i*i == n){
return (i+1)*(i+1);
}
}
return -1;
}
}
console.log(solution(121))
풀이2
Math.sqrt(); 함수를 사용해보자.
- 문법
Math.sqrt(x);
- x 는 숫자
- 반환값 : 주어진 숫자에 루트를 씌운다. > 만약 숫자가 음수이면 NaN을 반환한다.
- 예시
Math.sqrt(9); // 3
Math.sqrt(2); // 1.414213562373095
Math.sqrt(1); // 1
Math.sqrt(0); // 0
Math.sqrt(-1); // NaN
수정된 코드
function solution(n) {
let sqrt = parseInt(Math.sqrt(n));
if(0 < n && n < 50000000000000 ){
if(sqrt*sqrt == n){
return (sqrt+1)*(sqrt+1)
}else{
return -1
}
}
}
console.log(solution(121))
- let sqrt = parseInt(Math.sqrt(n));
- Math.sqrt()로 제곱근을 구하고 parseInt로 정수로 만들어준다
반응형
LIST
'알고리즘 문제' 카테고리의 다른 글
| [프로그래머스]음양 더하기_JavaScript (1) | 2025.01.02 |
|---|---|
| [프로그래머스]문자열 내 p와 y의 개수_JavaScipt (0) | 2025.01.02 |
| [프로그래머스] 자연수 뒤집어 배열로 만들기_js (0) | 2024.12.24 |
| [프로그래머스]x만큼 간격이 있는 n개의 숫자_js (2) | 2024.12.24 |
| Javascript 자릿수 더하기 (2) | 2024.11.28 |