본문 바로가기
알고리즘/Programmers

[TIL] 2023.04.19 Programmers_최대공약수와 최소공배수

by heereal 2023. 4. 19.

Today I Learned

  • Programmers 문제 풀기

 


Programmers 문제 풀기

최대공약수와 최소공배수

문제 설명

두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.

 

 

입출력 예

n m return
3 12 [3, 12]
2 5 [1, 10]

 

나의 1차 풀이

function solution(n, m) {
    let max = Math.max(n,m);
    let min = Math.min(n,m);
    let array = [];
    
    // 최대공약수
    for (let i = min; i >= 1; i--) {
        if (max % i === 0) {
            array.push(i);
            break;
        };
    };
    // 최대공배수
    let a = max
    while (a % min !== 0) {
        a += max
    }
    array.push(a)
    
    return array;
}

테스트 케이스 2개는 모두 통과해서 맞는 답인 줄 알았는데 제출했더니 정확성 테스트 대부분이 실패가 떴다. 일단 어디가 틀렸는지 모르겠어서 array에 push 하는 방식이 아닌 배열에 변수를 직접 넣는 방법으로 변경했다. 그리고 명확하게 틀렸던 부분은 최대공약수 코드에 if문 조건이었다. && 연산자로 최댓값, 최솟값을 모두 조건에 넣어줘서 문제를 통과할 수 있었다.

 

 

나의 최종 풀이

function solution(n, m) {
    let max = Math.max(n,m);
    let min = Math.min(n,m);
    let first = 0;
    
    // 최대공약수
    for (let i = min; i >= 1; i--) {
        if (max % i === 0 && min % i === 0 ) {
            first = i;
            break;
        };
    };
    
    // 최대공배수
    let second = max;
    while (second % min !== 0) {
        second += max;
    };
    
    return [first, second];
}
  1. n, m 중에 최댓값, 최솟값을 찾아서 변수에 할당한다.
  2. 최솟값부터 시작해서 1씩 작아지는 for문을 돌려서 최대공약수를 찾는다.
  3. while을 이용해서 최대공배수를 찾는다.
  4. 최대공약수와 최소공배수 변수를 담은 배열을 return한다.

 


회고

점핏에서 이력서 5군데 더 넣었다.

 

 

댓글