2798 블랙잭(완전탐색,브루트포스) Java(DFS)
2021. 9. 17. 11:09ㆍ알고리즘/백준
반응형
https://www.acmicpc.net/problem/2798
2798번: 블랙잭
첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장
www.acmicpc.net
DFS로 문제풀이를 했는데 다른사람 블로그에서 값을 static으로 관리하는것과 sum의 값을 배열형식으로 관리하면 편하다는걸 알았다.
그리고 방문여부 체크를 하는 visit boolean값의경우 대부분은 필수인듯하다...
참고한 풀이주소
https://hidelookit.tistory.com/77
[백준 2798] 블랙잭 (자바)
백준 2798번 블랙잭 (자바) 출처 www.acmicpc.net/problem/2798 2798번: 블랙잭 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며,..
hidelookit.tistory.com
public class blackjack {
//N장의 카드
//M을 넘지않으면서 M에 가장 가까운 숫자를 만드는 카드를골라야한다.
private static int N=5; //카드갯수.
private static int M=21; //목표숫자 21>=result
private static int[] array= {5,6,7,8,9};//해당 카드를 가지고 모든경우의수를 찾아본 다음 21과 가장 가까운 숫자를가진 카드3개의 합을 구한다.
private static boolean[] visit;
private static int sum = 0; //가장M과 가까운 총합결과
private static int[] result = new int[3];
public static void main(String[] args) {
int depth =0; //첫번째 숫자부터 시작
visit = new boolean[N]; //방문여부 체크
dfs(depth);
}
private static void dfs(int depth) {
//종료조건 3일때 result값과 M의 값을 비교해야함
if(depth==3) {
int hap = 0;
for (int i : result) {
hap += i;
}
if (hap > M) {
return;
}
if (hap <= M) {
sum = Math.max(sum, hap);
}
}else {
for (int i=depth; i<N; i++) {
//현재 번호에 방문처리가 안되어있는경우
if (!visit[i]) {
visit[i] = true;
result[depth] = array[i];
dfs(depth+1);
visit[i] = false;
}
}
}
}
}
반응형
'알고리즘 > 백준' 카테고리의 다른 글
2751문제 수 정렬하기2(정렬) Java (0) | 2021.09.17 |
---|---|
2750문제 수 정렬하기(정렬) Java (0) | 2021.09.17 |
7568문제 덩치(완전탐색,브루트포스)+DFS로 변경해본 풀이추가 (0) | 2021.09.17 |
2231문제 분해합(완전탐색,브루트포스) Java (0) | 2021.09.17 |
10870문제 피보나치(재귀) Java (0) | 2021.09.17 |