#19. [백준_C언어] 2798 : 블랙잭

 

 입력 코드 

#include <stdio.h>

main() {
	int N, M;
	scanf("%d %d", &N, &M);

	int num[100];
	int sum, max = 0;
	int i, j, k;

	for (i = 0; i < N; i++) {
		scanf("%d", &num[i]);
	}

	for (i = 0; i < N; i++) {
		for (j = i + 1; j < N; j++) {
			for (k = j + 1; k < N; k++) {
				sum = num[i] + num[j] + num[k];
				if (sum > max && sum <= M)
					max = sum;
			}
		}
	}
	printf("%d\n", max);
	return 0;
}

 

 코드 설명 

브루트포스 알고리즘을 이용하는 문제

#include <stdio.h>

main() {
	int N, M;
	scanf("%d %d", &N, &M);

	int s[100];
	int i, j, sum;
	for (i = 0; i < N; i++) {
		scanf("%d", &s[i]);
	}

	for (j = 0; j < N; j++) {
		sum = s[j] + s[j + 1] + s[j + 2];
	}
}

브루트포스 알고리즘도 모르고 문제를 풀다가 반복문을 쓰다가 역시 이렇게 하면 안 되겠다 싶어서 인터넷을 찾아봤다.

#include <stdio.h>

main() {
	int N, M;
	scanf("%d %d", &N, &M);

	int num[100];
	int sum, max = 0;
	int i, j, k;

	for (i = 0; i < N; i++) {
		scanf("%d", &num[i]);
	}

	for (i = 0; i < N; i++) {
		for (j = i + 1; j < N; j++) {
			for (k = j + 1; k < N; k++) {
				sum = num[i] + num[j] + num[k];
				if (sum > max && sum <= M)
					max = sum;
			}
		}
	}
	printf("%d\n", max);
	return 0;
}

반복문을 여러개 써서 모든 경우의 수를 다 돌린다고 한다. 

 

↓↓↓ 참고한 사이트

mjeong9316.tistory.com/162

 

[C 언어] 백준 2798. 블랙잭

2798. 블랙잭 (누르면 해당 문제로 이동) 세 장의 카드를 고르는 모든 경우를 고려하는 문제 제약사항) 시간 : 1 초 메모리 : 128 MB 문제) 카지노에서 제일 인기 있는 게임 블랙잭의 규칙은 상당히 쉽

mjeong9316.tistory.com

lazykarr.tistory.com/31

 

백준 2798번 블랙잭

백준 2798번 블랙잭 백준 문제 대충 카지노 어쩌고 블랙잭 어쩌고저쩌고 하면서 문제가 나와있습니다. 근데 그냥 요약해보면 N장의 카드 3장을 더해서 한도 M에 가장 가까운 값을 찾는 것입니다. 2

lazykarr.tistory.com

 

 

 문제 출처 

www.acmicpc.net/problem/2798

 

2798번: 블랙잭

첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장

www.acmicpc.net