두 수를 입력받아 두 수의 최대 공약수와 최소 공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그 다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대 공약수는 3, 최소 공배수는 12이므로 solution(3,12)는 [3, 12]를 반환해야 합니다.
class Solution {
public int[] solution(int n, int m) {
int[] answer = new int[2];
int a = Math.max(n, m);
int b = Math.min(n, m);
int gcd = 0;
int lcm = 0;
while (b > 0) {
int temp = b;
b = a % b;
a = temp;
}
gcd = a;
lcm = (n * m) / gcd;
answer[0] = gcd;
answer[1] = lcm;
return answer;
}
}
최대공약수는 유클리드 호제법으로 구했다.
- 와 의 최대공약수를 구하기 위해서 를 로 나눈 나머지 을 구한다.
- 를 으로 나눈 나머지 를 구한다.
- 을 로 나눈 나머지 R3를 구한다.
- 이 과정을 계속 반복하여, 어느 한 쪽이 나누어떨어질 때까지 반복한다. 이 직전 얻은 나머지가 최대공약수이다.
최소공배수는 두 수가 공통으로 가지고 있는 배수 중 가장 작은 수 이므로, 두 수를 곱한 값을 최대 공약수로 나눈 수와 같아 최대공약수를 구한뒤 구해주었다.
다른 풀이
class Solution {
public int[] solution(int n, int m) {
int[] answer = new int[2];
for (int i = 1; i < n + m; i++) {
if (n % i == 0 && m % i == 0) {
answer[0] = i;
answer[1] = n * m / answer[0];
}
}
return answer;
}
}
'오늘의 코딩 테스트' 카테고리의 다른 글
오늘의 코딩 테스트 (3진법 뒤집기) (0) | 2025.03.13 |
---|---|
오늘의 코딩 테스트 (직사각형 별찍기) (1) | 2025.03.04 |
오늘의 코딩 테스트( 문자열 다루기 기본) (0) | 2025.02.27 |
오늘의 코딩 테스트(부족한 금액 계산하기) (0) | 2025.02.26 |
오늘의 코딩 테스트(문자열 내림차순으로 배치하기) (1) | 2025.02.25 |