https://programmers.co.kr/learn/courses/30/lessons/12934
- 이유는 모르겠는데 위와같이 작성하니 8번줄의 제곱이 안먹힘. 여러가지 테스트를 해보니 array.indexOf를 사용해서 나온 수에는 연산자가 먹히지 않았음. 비쥬얼 스튜디오에서 했을땐 잘 먹혔음
- ⭐️잘보니 10번줄 때문에 그렇게 나오는거였다 ㅎㅎ... 코드 배치 순서가 문제였다
- 좀더 생각을 해보니 제곱근 판별을 하는데 제곱근 관련된 메소드를 쓴건 제곱근 판별 함수의 논리구조를 공부하는 측면에서 좋은 선택이 아니였던 것 같다.
function solution(n) {
var answer;
let integerArr = [0, 0];
for (let i = 1; i <= Math.floor(Math.sqrt(50000000000000)); i++) {
integerArr.push(i);
}
answer = integerArr.indexOf(Math.sqrt(n));
if (integerArr.indexOf(Math.sqrt(n)) > 0) {
answer = integerArr.indexOf(Math.sqrt(n)) ** 2;
}
return answer;
}
메소드도 너무 많이 사용했고, 주어진 조건범위 내의 수를 모두 계산하는 배열을 만들어서 코드의 속도면에서 상당히 비효율적인 것 같다
위 풀이를 보고 다시 적용해본 나의 풀이
function solution(n) {
var answer = -1;
let x = 0;
while (x ** 2 < n) {
x++;
}
if (x ** 2 === n) {
answer = (x + 1) ** 2;
}
return answer;
}
위 풀이는 기존 나의 풀이보다는 n이 작다면 굳이 많은 연산을 하지 않아도되서 효율적이나 n이 커질수록 비효율적이게 됨
위 풀이를 보고 다시 적용한 나의 풀이
function solution(n) {
switch(n % Math.sqrt(n)){
case 0:
return (Math.sqrt(n) + 1) ** 2;
default:
return -1
}
}
- 해당n의 경우에만 계산을 하면되서 속도가 가장 빨랐다
- 또한 조건문 자체가 계산식이여서 훨씬 효율적이였던것 같다