Q. 최대공약수와 최소공배수
A.
class Solution {
//코드 재사용성을 위해 최대공약수와 최소공배수는 메서드를 따로 분리해봄
public int[] solution(int n, int m) {
//두 수 중 큰값 = max, 두 수 중 작은 값= min
int max = Math.max(n,m);
int min = Math.min(n,m);
//GCD : 최대공약수를 계산하는 메서드 호출, LCM : 최소공배수를 계산하는 메서드 호출
int gcd = getGCD(max,min);
int lcm = getLCM(max,min,gcd);
//answer = [최대공약수, 최소공배수]를 리턴해야하니까 배열로 반환
int[] answer = new int[]{gcd,lcm};
return answer;
}
//최대공약수 계산
private int getGCD(int a, int b){
//나머지가 0이 될때까지 반복
while(b != 0){
//원래의 b 값을 c에 저장하고,
//a를 b로 나눈 나머지를 b에 저장,
//이전 b 값을 a에 저장 후 나머지가 0이 될때까지 반복
//ex> a=48, b=18
// c = 18 , b = 48%18 = 12, a = 18 -> c = 12, b = 18%12 =6, a = 12 -> c = 6, b = 12%6 = 0, a=6
//나머지가 0이 됐으니까 반복 종료 return 6
int c = b;
b = a % b;
a = c;
}
return a;
}
//최소공배수 계산
private int getLCM(int a, int b, int gcd){
//두 수를 곱한 뒤에 최대공약수로 나누면 최소공배수
return (a * b) / gcd;
}
}
'알고리즘, 코딩테스트' 카테고리의 다른 글
[프로그래머스/ 코딩테스트 연습문제] 이상한 문자 만들기 (0) | 2024.11.26 |
---|---|
[프로그래머스/ 코딩테스트 월간코드챌린지 시즌1] 3진법 뒤집기 (0) | 2024.11.20 |
[프로그래머스/ 코딩테스트 연습문제] 직사각형 별 찍기 (1) | 2024.11.18 |
[프로그래머스/ 코딩테스트 연습문제] 행렬의 덧셈 (0) | 2024.11.18 |
[프로그래머스/ 코딩테스트 연습문제] 문자열 다루기 기본 (0) | 2024.11.17 |