티스토리 뷰
두 수가 주어지며, 두수의 최대 공약수와 최소 공배수를 구하라
약수란?
약수란 어떤 수를 나누어떨어지게 하는 수를 말한다. 약수에는 항상 1과 자기 자신을 포함한다.
12의 약수를 구하면 1, 2, 3, 4, 6, 12 가 된다.
최대 공약수란?
0 이 아닌 두 개 이상의 정수의 공통되는 약수 중에서 가장 큰 수 이다. 따라서 두 정수 a, b 의 최대 공약수는 a 의 약수인 동시에 b의 약수인 수, 즉 두 정수 a, b 의 공약수 중에서 가장 큰 수를 의미한다.
최소 공배수란?
0이 아닌 두 개 이상의 정수의 양의 공배수 중에서 가장 작은 수이다. 따라서 두 정수 a, b의 최소 공배수는 a 의 배수인 동시에 b 의 배수인 수, 즉 두 정수 a, b 의 공배수 중에서 양수인 것 중 가장 작은 수를 의미한다.
-네이버 지식 백과 참고-
getDivisor
약수를구할때 for 문을 num 만큼 반복해도 되지만 num / 2 를 하면 불필요한 계산을 안해도 된다.
약수는 자기 자신을 2 로 나눈 수의 이상으로 나눠지지 않기 때문이다.
num 을 i 로 나눈 나머지가 0이 되면 i 가 num 의 약수가 되므로 ArrayList 인 result 에 add 하여 값을 추가 시킨다.
getGCD
최대 공약수는 두 수의 약수 중에서 공통 되면서 가장 큰 수 이다.
getDivisor 를 통해 두 수의 약수를 구한 다음 두 수를 비교해서 가장 큰 수를 찾으면 된다.
두 수는 getDivisor 에서 ArrayList 형태로 반환이 되기 때문에 get 으로 값을 가져 올 수 있다.
get 으로 가져온 값의 형태는 element 이므로 if 문에서 (int) 를 이용하여 형 변환 뒤 숫자를 비교하였다.
getLCM
최소 공배수는 두 수를 곱한 다음 최대 공약수로 나누면 쉽게 구할 수 있다.
import java.util.ArrayList;
public class Practice {
// 약수
public ArrayList getDivisor(int num) {
ArrayList result = new ArrayList();
for (int i = 1; i <= num/2; i++) {
if(num % i == 0){
result.add(i);
}
}
result.add(num);
return result;
}
// 최대 공약수
public int getGCD(int numA, int numB) {
int gcd = -1;
ArrayList a = getDivisor(numA);
ArrayList b = getDivisor(numB);
for (int i = 0; i < a.size(); i++) {
for (int j = 0; j < b.size(); j++) {
if(a.get(i) == b.get(j)){
if((int)a.get(i) > gcd){
gcd = (int) a.get(i);
}
}
}
}
return gcd;
}
// 최소 공배수
public int getLCM(int numA, int numB) {
int lcm = -1;
lcm = numA * numB / this.getGCD(numA,numB);
return lcm;
}
public static void main(String[] args) {
int number1 = 10;
int number2 = 6;
Practice p = new Practice();
ArrayList l1 = p.getDivisor(number1);
ArrayList l2 = p.getDivisor(number2);
System.out.println("l1 = " + l1);
System.out.println("l2 = " + l2);
System.out.println("최대 공약수: " + p.getGCD(number1, number2));
System.out.println("최대 공배수: " + p.getLCM(number1, number2));
}
}
'Algorithm > 자료구조' 카테고리의 다른 글
자료구조 - 연결 리스트 Linked List (0) | 2022.11.22 |
---|---|
Catalan Numbers (0) | 2022.11.15 |
행복한 수 찾기 (수열) (0) | 2022.11.12 |
파스칼의 삼각형 (0) | 2022.11.12 |
경우의 수 구하기 (합의 법칙, 곱의 법칙) (0) | 2022.11.09 |
- Total
- Today
- Yesterday
- 프로그래머스
- 개발자 취준
- 코테공부
- 취업준비
- 코테 준비
- 개발자 면접 준비
- 개발자 취업 준비
- 자바
- 코딩테스트공부
- 코딩테스트 공부
- 코딩테스트 준비
- 백준
- 제로베이스 백준 장학금
- 취준
- 백엔드 개발자 기술 면접 준비
- 프로그래머스 카카오
- 기술 면접 준비
- 프로그래머스 자바
- 백엔드 개발자 취업 준비
- 제로베이스 백엔드 스쿨
- 자바공부
- 주니어 개발자 취업 준비
- 취업 준비
- 알고리즘 공부
- java
- 코테준비
- 백엔드 개발자
- 알고리즘공부
- 코딩테스트
- 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |