[프로그래머스] 최대공약수와 최소공배수

Jun_Gyu·2023년 8월 22일
0

프로그래머스

목록 보기
7/14


첫 풀이

수학적인 규칙을 요구하는 문제에 처음에 조금 당황했지만..
부딪혀 보는식으로 풀이를 진행했었다.

먼저 입력받은 두 수가 서로 약수, 배수의 관계라는 조건으로부터 코드를 작성했으며,
Math.max(), Math.min() 의 두가지 메소드를 활용해서 두 수의 크기를 비교했다.

const solution = (n, m) => {
    let min = Math.min(n,m)
    let max = Math.max(n,m)
    let 최대공약수;
    let 최소공배수;
    if(max % min === 0) {
        최대공약수 = min;
        최소공배수 = max;
        return [최대공약수, 최소공배수]
    } else {
        for(let i=1; i <= min ; i+=1){
            if( min % i === 0  &&  max % i === 0 ){
                최대공약수 = i;
                최소공배수 = min * max / 최대공약수;
            }
        }
         return [최대공약수, 최소공배수]
    }    
}

else 문에서는 for 반복문을 사용해서 1부터 시작하여 최대공약수를 찾아가는 방법을 활용해서
n과m의 최대공약수, 최소공배수를 찾아 답을 return 해주었다.

하지만 풀이를 개선하는 과정에서 또 한번 충격을 먹었던 주인장이었으니..


풀이개선

const solution = (n, m) => {
    let min = Math.min(n,m)
    let max = Math.max(n,m)
    let 최대공약수;
    for(let i=1; i<=min;i++){
        if( max % i === 0 && min % i === 0 ) {
            최대공약수 = i;
        }
    }
    const answer = [ 최대공약수, (max * min / 최대공약수)];
    return answer;
}

사실 기존에 작성했던 첫 if 조건문의 항목은 쓸데없이 코드만 길게 할 뿐이었다..
최대공약수, 최소공배수의 조건에 부합하다면 위의 코드로도 충분히 결과를 도출 할 수 있었다.. ㅋㅋㅋㅋ

나름 고민좀 해서 문제 해결했었는데, 살짝 허탈(?)한 느낌이 들었던 문제였다..

profile
시작은 미약하지만, 그 끝은 창대하리라

0개의 댓글