Algorithm(중)

Jeong Yeongmin·2022년 9월 28일
0

Algorithm

목록 보기
8/9

function factorNumber(n){
    let count = 0;
    for (let i=1; i<=n; i++){
        if (n%i==0) count++;
    }
    return count;
}



function solution(left, right) {
    var answer = 0;
    let count = 0;
    let result = 0;

    for (let i=left; i<=right; i++){
        count = factorNumber(i);
        result = count%2 == 0 ? result+i : result-i;
    }

    return result;

}

// alternative
Number.isInteger(Math.sqrt(i)) ? answer -= i : answer += i;

feedback: 어떤 숫자의 제곱근이 정수이면 약수의 개수가 항상 홀수임을 이용하여 푼 방법도 있다. syntax: Number.isInteger(value). JS에는 수가 정수인지 아닌지를 확인하는 기능이 있다는 것을 알 수 있었던 문제.

function solution(n, m) {
    var answer = [];
    let HCF = 1;

    // Highest common factor
    for (let i=1; i<=Math.max(n,m); i++ ){
        if (n%i == 0 && m%i ==0 && i > HCF){
            HCF = i;
        }
    }
    
    // Lowest common multiple
    let LCM = n/HCF * m/HCF * HCF;
    answer.push(HCF);   answer.push(LCM);
    return answer;   

}

// alternative
var r;
for (var ab = a*b; r = a%b; a=b, b=r){}
return [b, ab/b];

feedback: for문에 대한 이해를 새로운 관점에서 다시 할 수 있었던 문제. 특정 횟수만큼 반복하고 싶을 때만 사용해서 '5번 반복해야 되니깐 i<5 사용' 라고 생각했지만, 사실상 i<5가 false일 때 실행을 종료하는 것이 for문이다. 추가적으로, 유클리드 호제법을 사용하여 GCD(a,b) = GCD(b,a%b), if a%b, GCD = b, else, GCD = GCD(b,a%b). 때문에 만약 a%b가 0이라면 false가 되어 실행이 종료된다. 문제는 간단했지만 배울 점이 많았던 문제.

function solution(array, commands) {
    let arr = [];
    let answer =[];

    for (let i=0; i<commands.length; i++){
        arr = (array.slice(commands[i][0]-1, commands[i][1]));
        arr.sort((a,b) => a-b);
        //console.log(arr);
        answer.push(arr[commands[i][2]-1]);
        //console.log(answer);
    }  
    return answer;
}

// alternative
// 이미 정해진 크기의 배열일 경우는 미리 공간을 만들고 시작 = 배열 디스트럭팅
// const [ePosition, ePosition, position] = command
function solution(array, commands){
    return commands.map(command =>{
        const [sPosition, ePosition, position] = command;
        const newArray = array
            .filter((value,fIndex) => fIndex >= sPosition-1 && fIndex <= ePosition-1)
            .sort((a,b) => a-b)

        return newArray[position-1];
    })
}
> feedback: 많이 손이 가지 않았던 배열 디스트럭팅의 적절한 예. array의 사이즈가 정해져있고 사용하고자 하는 data가 일정한 position에 위치하여 있기 때문에 가능했던 문제이다. 하지만 filter,sort,map이런 것들을 너무 많이 사용하다 보니 가독성이 좋을 수는 있지만 time complexity가 늘어났다. 개인적으로 알고리즘은 아무리 거창하게 쓰더라고 시간복잡도가 더 크다면 안 좋은 알고리즘이라고 생각하는 사람이라 alternative가 최상의 코드라고 생각지는 않는다.





0개의 댓글

관련 채용 정보