일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Java
- 데이터베이스 연동
- ORM
- 백엔드스쿨
- 개발자
- 제로베이스 #백엔드 #Java #Spring #개발자 #백엔드공부 #백엔드 스쿨
- 리포지토리 인터페이스
- 엔티티 설계
- 백엔드공부
- MariaDB
- #devops #terraform #state
- validated
- 프로젝트 생성
- auditing
- 스프링부트실전가이드
- JPA
- 인텔리제이
- DAO 연동 컨트롤러 서비스 설계
- 제로베이스
- spring
- DAO 설계
- 스프링 부트 핵심 가이드
- Swagger
- 유효성검사
- 백엔드
- Today
- Total
JeongJin's Blog
경우의 수를 자바를 이용하여 이해하기 본문
코딩테스트 문제를 보면 경우의 수를 구하는 문제가 출제되는데 정말 어렵다고 생각한다.
그렇기 때문에 어떻게 경우의 수를 자바 프로그래밍을 통해서 구현하는지 알아볼려고 한다.
1. 경우의 수
- 어떤 사건에서 일어날 수 있는 경우의 가짓수 를 의미한다.
예를 들면, 동전을 던지는 사건 : 경우의 수 2, 주사위를 던지는 사건 : 경우의 수 6
집합으로 표기 : n(A)
2. 합의 법칙
- 사건 A 또는 사건 B가 일어날 경우의 수를 의미한다.
예를 들면, 두 개의 주사위를 던졌을 때 합이 3또는 4의 배수일 경우의 수
사건 A : 합이 3의 배수일 경우 : 12가지
3 : {1,2}, {2,1}
6 : {1,5}, {2,4}, {3,3}, {4,2}, {5,1}
9 : {3,6}, {4,5}, {5,4}, {6,3}
12 : {6,6}
사건 B : 합이 4의 배수일 경우 : 9 가지
4 : {1,3}, {2,2}, {3,1}
8 : {2,6}, {3,5}, {4,4}, {5,3}, {6,2}
12 : {6,6}
집합으로 표기 : n(AUB) = n(A) + n(B) - n(A ∩ B) : 12 + 9 - 1(12의 중복 제거) = 20 가지
3. 곱의 법칙
- 사건 A와 사건 B가 동시에 일어날 경우의 수를 의미한다.
예를 들면, 두 개의 주사위 a,b를 던졌을 때 a는 3의 배수, b는 4의 배수인 경우의 수
사건 A : a가 3의 배수일 경우 : 2가지
3, 6
사건 B : b가 4의 배수일 경우 : 1가지
4
집합으로 표기 : n(A ∩ B) = n(A) X n(B) : 2 X 1 = 2 가지
자바로 구현해 보면 아래와 같다.
- 합의 법칙 경우 HashSet을 이용하여 해당 경우의 수를 추가해주면 HashSet 특성 상 중복이 제거 되므로 구현하기 편하다.
- 주사위 경우 각각의 경우의 수를 계산해서 합 또는 곱의 법칙인지 판단하여 구현하면 된다.
import java.util.ArrayList;
import java.util.Arrays; import java.util.HashSet; public class Main { public static void main(String[] args) { // 1. 합의 법칙 System.out.println("== 합의 법칙 =="); // 두 개의 주사를 던졌을 때 합이 3 또는 4의 배수일 경우의 수 int[] dice1 = { 1, 2, 3, 4, 5, 6 }; int[] dice2 = { 1, 2, 3, 4, 5, 6 }; int nA = 0; int nB = 0; int nAandB = 0; // 기본 풀이 for (int itemA : dice1) { for (int itemB : dice2) { if ((itemA + itemB) % 3 == 0) { nA += 1; } if ((itemA + itemB) % 4 == 0) { nB += 1; } if ((itemA + itemB) % 12 == 0) { nAandB += 1; } } } int result = nA + nB - nAandB; System.out.println("결과: " + result); // HashSet 이용 HashSet<ArrayList> allCase = new HashSet(); for (int itemA : dice1) { for (int itemB : dice2) { if ((itemA + itemB) % 3 == 0 || (itemA + itemB) % 4 == 0) { ArrayList list = new ArrayList(Arrays.asList(itemA, itemB)); allCase.add(list); } } } System.out.println("결과: " + allCase.size()); // 2. 곱의 법칙 System.out.println("== 곱의 법칙 =="); // 두 개의 주사위 a, b를 던졌을 때 a는 3의 배수, b는 4의 배수인 경우의 수 nA = 0; nB = 0; for (int itemA : dice1) { if (itemA % 3 == 0) { nA += 1; } } for (int itemB : dice2) { if (itemB % 4 == 0) { nB += 1; } } System.out.println("결과: " + nA * nB); } } |
'1일1공부 > 기초수학' 카테고리의 다른 글
지수와 로그 개념과 자바로 구현해 보기 (0) | 2023.09.10 |
---|---|
점화식과 재귀함수 개념과 자바로 구현해보기 (0) | 2023.09.09 |
조합의 개념 이해와 자바로 구현해 보자 (0) | 2023.09.07 |
순열의 개념 이해와 자바로 구현해 보자 (0) | 2023.09.07 |
집합을 자바를 이용하여 이해하기 (0) | 2023.09.06 |