Hyunebee
경우의 수 본문
경우의 수
어떠한 사건이 일어날 수 있는 가짓수
1.합의 법칙(n(A)∪n(B) => n(A) + n(B) - n(A∩B))
사건 A 또는 B가 일어날 확률 (사건 A따로 B따로 or)
2.곱의 법칙(n(A x B) => n(A) x n(B))
사건 A 와 B가 동시에 일어날 확률(And)
대표적인 문제(약수구하기, 최소공배수, 최대공약수)
import java.util.ArrayList;
public class Practice {
//약수
public ArrayList getDivisor(int num){
ArrayList arrayList = new ArrayList();
for(int i=1; i <= num; i++){ // 0으로는 나눗셈 x 1시작
if(num % i == 0){ // 나머지가 0이면 약수
arrayList.add(i);
}
}
return arrayList;
}
//최대공약수
public int getGCD(int num1, int num2){
ArrayList arrayList = this.getDivisor(num1); // num1의 약수
ArrayList arrayList1 = this.getDivisor(num2); // num2의 약수
arrayList.retainAll(arrayList1); //서로의 교집합
return (Integer)arrayList.get(arrayList.size()-1);//List는 순서를 보장함으로 마지막에 있는 수가 최대공약수
}
//최소공배수
public int getLCM(int num1, int num2){
if(num1 <=0 || num2 <=0){ // 양의 정수가 아닐때
return 0;
}
return (num1 * num2) / getGCD(num1,num2);
}
public static void main(String[] args) {
int number1 = 10;
int number2 = 6;
Practice p = new Practice();
ArrayList l1 = p.getDivisor(number1); // 10: 1, 2, 5, 10
ArrayList l2 = p.getDivisor(number2); // 6: 1, 2, 3, 6
System.out.println("l1 = " + l1);
System.out.println("l2 = " + l2);
System.out.println("최대 공약수: " + p.getGCD(number1, number2));
System.out.println("최대 공배수: " + p.getLCM(number1, number2));
}
}