C & C++/BOJ
[백준] 2798번: 블랙잭
와금
2021. 3. 11. 17:47
728x90
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