Code&Data Insights
[ 기초수학| JAVA ] - 경우의 수 < Probability > 본문
Computer Science/Comp sci_courses
[ 기초수학| JAVA ] - 경우의 수 < Probability >
paka_corn 2022. 5. 24. 10:40< 경우의 수 | 확률>
- Probability (Number of Cases)
- 어떤 일이 일어날 수 있는 모든 경우의 수
(Probability is the branch of mathematics concerning numerical descriptions of how likely an event is to occur,
or how likely it is that a proposition is true. )
- 합의 법칙 : 사건 A 또는 사건 B가 일어날 경우의 수
=> n(AUB) = n(A) + n(B) - n(A∩B)
- 곱의 법칙 : 사건 A와 사건 B가 동시에 일어날 경우의 수
n(AXB) = n(A) X n(B)
(1) - 합의 법칙
< The addition rule >
// 두 개의 주사위를 던졌을 때 합이 3 또는 4의 배수일 경우의 수
int[] dice1 = {1,2,3,4,5,6};
int[] dice2 = {1,2,3,4,5,6};
int numA = 0;
int numB = 0;
int numAandB = 0;
// Using Iteration
for(int item1 : dice1)
{
for(int item2: dice2)
{
if(item1 + item2) % 3 == 0)
{
numA += 1;
}
if(item1 + item2) % 4 == 0)
{
numB += 1;
}
if(item1 + item2) % 12 == 0) // LCM - 최소공배수
{
numB += 1;
}
}
}
System.out.println("Result : " + (numA + numB - numAandB));
// Using HashSet
HashSet<ArrayList> allCase = new HaseSet<>();
for(int item1:dice1)
{
for(int item2:dice2)
{
if((item1 + item2) % 3 == 0 || (item1 + item2) % 4 == 0 )
{
ArrayList list = new ArrayList(Array.asList(item1, item2));
allCase.add(list); // 중복값은 자동으로 제거
}
}
}
System.out.println("Result : " + allCase.size());
(2) 곱의 법칙
< The multiplication rule >
int[] dice1 = {1,2,3,4,5,6};
int[] dice2 = {1,2,3,4,5,6};
int numA = 0;
int numB = 0;
System.out.println("[ 곱의 법칙 - The Multiplication Rule ]" );
// 두 개의 주사위 a,b를 던졌을 때, a는 3의 배수 그리고 b는 4의 배수인 경우의 수
for(int item1: dice1)
{
if(item1 % 3 ==0)
{
numA++;
}
}
for(int item1: dice1)
{
if(item1 % 3 ==0)
{
numA++;
}
}
for(int item1: dice1)
{
if(item1 % 3 ==0)
{
numA++;
}
}
for(int item1: dice2)
{
if(item1 % 4 ==0)
{
numB ++;
}
}
System.out.println("Result : " + (numA * numB));
(3) 최대공약수와 최대공배수
< GCD & LCM >
// import java.util.ArrayList;
// 약수 - divisor
public ArrayList getDivisor(int num)
{
ArrayList result = new ArrayList();
for(int i=1; i <= (int)num/2; i++;)
{
if(num % 1 ==0)
{
result.add(i);
}
}
result.add(num);
return result;
}
// 최대공약수(GCD) - Greatest Common Diviosor
public int getGCD(int numA, int numB)
{
int gcd = -1;
ArrayList divisorA = this.getDivisor(numA);
ArrayList divisorB = this.getDivisor(numB);
for(int itemA: (ArrayList<Integer>divisorA)
{
for(int itemB: (ArrayList<Integer>divisorB)
{
if(itemA == itemB)
{
if(itemA > gcd)
{
gcd = itemA;
}
}
}
}
return gcd;
}
// 최소공배수(LCM) - Lowest Common Multiple
// LCM = (A*B) / GCD
public int getLCM(int numA, int numB)
{
int lcm = -1;
int gcd = this.getGCD(numA, numB);
if(gcd != -1)
{
lcm = numA * numB / gcd;
}
return lcm;
}
(4) GCD를 재귀함수로 구현
static int gcd(int a, int b){
if(a % b == 0){
return b;
}
return gcd(b, a%b);
}
'Computer Science > Comp sci_courses' 카테고리의 다른 글
[C++ Programming] Pointer (0) | 2022.08.17 |
---|---|
[ 기초수학| JAVA ] - 순열 & 조합 < Permutation / Combination > (0) | 2022.05.31 |
[ 기초수학| JAVA ] - 점화식과 재귀함수 < Recurrence relation / Recursive Function > (0) | 2022.05.24 |
[ 기초수학| JAVA ] - 집합 < Set - HashSet / ArrayList > (0) | 2022.05.24 |
[Techniques in Symbolic Computation] Equivalence classes / Diophantine equation / Bezout's Identity (0) | 2022.01.20 |
Comments