DINGA DINGA
Published 2021. 3. 11. 17:47
[백준] 2798번: 블랙잭 C & C++/BOJ
728x90

www.acmicpc.net/problem/2798

 

2798번: 블랙잭

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

www.acmicpc.net

 

코드

#include <stdio.h>

main() {
	int n, m, arr[100];	//arr: 카드를 담는 배열
	int sum = 0, res = 0;	//sum: 카드 3장의 합, res: m을 넘지 않으면서 m에 최대한 가까운 카드 3장의 합
	scanf("%d%d", &n, &m);
	for (int i = 0; i < n; i++)
		scanf("%d", &arr[i]);
	for (int i = 0; i < n - 2; i++)				//첫번째 카드 뽑기
		for (int j = i + 1; j < n - 1; j++)		//두번째 카드 뽑기
			for (int k = j + 1; k < n; k++) {	//세번째 카드 뽑기
				sum = arr[i] + arr[j] + arr[k];
				if (sum <= m && res < sum)
					res = sum;
			}
	printf("%d", res);
}

 

설명

 

우선 n과 m을 입력 받고, for문을 이용해 n개의 카드를 입력 받는다.

n개의 카드 중 3장을 뽑아 더하는 것은 삼중 for문을 이용한다.

첫번째로 i번째 카드를 뽑고, i+1번째 카드와 i+2번째 카드를 뽑는다. 그리고 세 카드의 숫자를 더한 값을 sum에 저장한다. 만약 sum이 m보다 작거나 같고 res보다 크면 res를 sum의 값으로 업데이트한다.

그리고 다시 카드를 뽑는데, 이번에는 i번째 카드, i+1번째 카드, i+3번째 카드를 더한다. 이런식으로 모든 경우의 수를 계산한다.

삼중 for문의 실행이 모두 끝나면 res를 출력한다.

728x90

'C & C++ > BOJ' 카테고리의 다른 글

[백준] 5597번: 과제 안 내신 분..?  (0) 2021.03.12
[백준] 3046번: R2  (0) 2021.03.12
[백준] 10809번: 알파벳 찾기  (0) 2021.03.04
[백준] 1834번: 나머지와 몫이 같은 수  (0) 2021.03.04
[백준] 1731번: 추론  (0) 2021.03.03