프로그래머스 알고리즘 LV.1 - 정수 제곱근 판별
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이 커질수록 비효율적이게 됨
📘다른 사람 풀이 2
위 풀이를 보고 다시 적용한 나의 풀이
function solution(n) {
switch(n % Math.sqrt(n)){
case 0:
return (Math.sqrt(n) + 1) ** 2;
default:
return -1
}
}
- 해당n의 경우에만 계산을 하면되서 속도가 가장 빨랐다
- 또한 조건문 자체가 계산식이여서 훨씬 효율적이였던것 같다
📝정리
- 내 풀이가 해당 문제가 요구하는 논리를 이미 구현해놓은 메소드를 사용하는건지 항상 생각해 보자
- 항상 어떻게 하면 더 효율적인 코드인지를 생각해보자.
- 내가 인자로 넣어주는 값만 해당 코드가 돌아가게 짜는 것이 효율적이다
Author And Source
이 문제에 관하여(프로그래머스 알고리즘 LV.1 - 정수 제곱근 판별), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@roadzmoon76/프로그래머스-알고리즘-LV.1-정수-제곱근-판별
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
- 내가 인자로 넣어주는 값만 해당 코드가 돌아가게 짜는 것이 효율적이다
Author And Source
이 문제에 관하여(프로그래머스 알고리즘 LV.1 - 정수 제곱근 판별), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@roadzmoon76/프로그래머스-알고리즘-LV.1-정수-제곱근-판별저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)