PROGRAMMERS/연습문제
PROGRAMMERES Level 1 연습문제 최대공약수와 최소공배수 (JAVA 자바)
c0mmedes
2022. 8. 30. 01:22
import java.util.*;
class Solution {
public int[] solution(int n, int m) {
int answer[] = new int[2];
int maxNum = Math.max(n,m);
int minNum = Math.min(n,m);
//최대공약수
while(minNum!=0){
int r = maxNum % minNum;
maxNum = minNum;
minNum = r;
}
answer[0] = maxNum;
// 최소공배수는 n과 m을 최대공약수로 나누어주고 곱해주면 된다.
answer[1] = n*m / maxNum;
return answer;
}
}
두 정수 a, b(a>b)가 있을 때 a를 b로 나누었을 때의 나머지(a%b)를 r이라고 했을 때 a와 b의 최대공약수가 b와 r의 최대공약수랑 같다.
- 조건인 a>b를 만족시키기 위해 큰 수를 maxNum에 초기화시켜주고 작은 수를 minNum에 초기화시켜줌
- a와 b의 나머지(r)를 구하고 maxNum에 최솟값을 넣어주고 minNum에는 나머지(r)를 넣어준다.
- 이런식으로 minNum이 0이 될 때까지 반복하고 이 때의 maxNum이 최대공약수이다.
- G(a, b) = G(b, r) 이므로 a, b의 최대공약수를 구하기 위해서 a(maxNum)에는 다음 반복문을 위해 b(minNum)을 넣어주고 minNum에는 나머지(r)를 넣어준다. 이렇게 반복하다보면 나머지(r)가 0이 되고 그 나머지가 minNum에 들어가서 반복문이 종료된다.