Algorithm/Programmers(Java)

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

비망노트 2022. 12. 23. 23:41

문제 설명

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

 

제한사항

- 두 수는 1이상 1000000이하의 자연수입니다.

 

입출력 예

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

 

입출력 예

입출력 예 #1
위의 설명과 같습니다.

 

입출력 예 #2
자연수 2와 5의 최대공약수는 1, 최소공배수는 10이므로 [1, 10]을 리턴해야 합니다.

 

 

 

⭕ 풀이

class Solution {
    public int[] solution(int n, int m) {
        int[] result = new int[2];
		
        int cnt = 1;
        int temp = m;
        while(temp<=n*m) {
            if(temp%n==0&&temp%m==0) {
                result[0] = n/cnt;
                result[1] = temp;
                break;
            }
            temp = m * ++cnt;
        }
        return result;
    }
}

 

 

cnt - 최소공배수를 구하기위해 입력받은 정수 m에 1씩 증가시키며 곱할 변수

temp - m * cnt 를 담을 변수 (반복문이 돌때마다 m*++cnt로 초기화됨)

 

이 두 변수를 선언하여 temp이 n과 m의 공배수라면 반환할 int배열 result의 [0], [1]에 담는다.

입력받은 작은 정수를 증가시킨 cnt로 나누면 최대공약수가 된다.

 

예를들어 4, 9 를 입력받았다면

둘의 최소공배수가아닌 최대공배수는 4*9 36 이 될것이므로 while문의 조건을 n*m까지로 제한해둔다.

이후

9*1 = 9

9*2 = 18

9*3 = 27

9*4 = 36 이런식으로 cnt를 1씩 증가시키는데 공배수가 되는 36까지 왔다면 cnt는 4일것이다.

그럼 n을 cnt로 나누게되면 1 즉 최대공약수가 된다.

 

 

 

 

-출처

https://school.programmers.co.kr/learn/courses/30/lessons/12940