프로그래머스

[1단계] 정수 제곱근 판별

chsua 2022. 11. 16. 15:04

문제 설명

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

 

제한 사항

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

 

내 성공답안: 제곱근 이용해서 구해보기
function solution(n) {
    return (n**(1/2))%1==0?((n**(1/2))+1)**2:-1 ;
}
내 실패답안: 일부 성공하기는 했으나 시간초과가 되어 실패
function solution(n) {
    let divN = [] ;
    for (let i = 1; i <= n ; i++){
        (n%i==0)?divN.push(i):n ;
    }
    let lenDivN = divN.length ;
    return (lenDivN%2==0)?-1: ((divN[Math.floor(lenDivN/2)])+1)**2 ;  
}

> 약수 배열을 만들어 중앙값을 구하는 방식으로 했는데, 이 과정에서 n이 커지면 감당할 수 없어지는 것 같음

 

조언:

n**(½)는 변수로 만드는게 좋음

변수의 수가 느는것은 필요하다면 상관없음

중복되는 것, 쓸데없는것을 줄여서 가독성을 높이는 것이 중요

코테에서 **(½)쓰지 말라고 하면 다른 방법 찾아야함