본문 바로가기
백준 문제 풀이 & C++ 공부

백준 2798번 C/C++

by daisy0461 2021. 2. 27.

www.acmicpc.net/problem/2798

 

2798번: 블랙잭

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

www.acmicpc.net

 

블랙잭이란 것을 처음 들어보았는데 이러한 규칙이 있는 줄은 몰랐다...

나중에 해볼 수 있으면 재밌을 것 같다.

 

결국에 이 문제에서는 가장 근사값 또는 같은 값을 찾아야한다.

3장의 카드를 선택해서 3중 for문을 돌리기로 선택을 하였는데

보통 같으면 이러한 선택을 하지 않았겠지만 카드의 개수로 주어지는 n의 값이 많이 크지 않았고

충분히 3중 for문으로 돌려도 된다라고 판단을 했기 때문에 이러한 생각으로 문제를 풀어 나갔고

큰 막힘 없이 문제를 풀 수 있었다.

 

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>

//블랙잭의 규칙 = 카드의 합이 21을 넘지 않는 한도 내에서 가장 크게 만드는 것.
// new version
// 카드에는 양의 정수가 있다.
// n장의 카드를 모두 숫자가 보이게 바닥에 놓는다.
//  그런 후 딜러는 숫자 m을 크게 외친다.
// 플레이어는 n장의 카드 중 3장의 카드를 고른다.
// 이때 m은 넘지 않으며 m과 최대한 가깝게 만들어야 한다.
// m에 최대한 가까운 카드 3장의 합을 구해 출력.

int main()
{	
	int n, m;
	scanf("%d %d", &n, &m);	//n = 카드 갯수, m = 합

	int card[100];
	for (int i = 0; i < n; i++) {	//어떤 카드가 있는지 받음.
		scanf("%d", &card[i]);
	}

	int sum=0;
	
	for (int i = 0; i < n; i++) {
		for (int j = i+1; j < n; j++) {
			for (int k = j+1; k < n; k++) {
				if (card[i] + card[j] + card[k] >= sum && card[i] + card[j] + card[k] <= m) {
					sum = card[i] + card[j] + card[k];
				}
			}
		}
	}
	
	printf("%d", sum);
	

}

'백준 문제 풀이 & C++ 공부' 카테고리의 다른 글

백준 2869번 C/C++  (0) 2021.03.01
백준 2839번 C/C++  (0) 2021.03.01
백준 2275번 C/C++  (0) 2021.02.27
백준 2805번 C/C++  (0) 2021.02.24
백준 10250번 C/C++  (0) 2021.02.16