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);
}

 

Comments