주소 : https://www.acmicpc.net/problem/2798
2798번: 블랙잭
첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장
www.acmicpc.net
소스 코드 :
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
int card, num = 0;
int seq[101] = { 0, };
scanf("%d %d", &card, &num);
for (int i = 0; i < card; i++)
{
scanf("%d", &seq[i]);
}
int sol = 300000;
int pri = seq[0] + seq[1] + seq[2];
for (int i = 0; i < card-2; i++)
for (int j = i + 1; j < card; j++)
for (int k = j + 1; k < card; k++)
{
int sum = seq[i] + seq[j] + seq[k];
int t = num - sum;
if (sol > t && sum <= num)
{
sol = t;
pri = seq[i] + seq[j] + seq[k];
}
else if (t == 0)
{
printf("%d", pri);
return 0;
}
}
printf("%d", pri);
return 0;
}
마무리 : 이 문제는 M의 숫자에 맞추거나 넘지 않는 대신에 가까운 숫자를 만들어야한다. 그래서 숫자를 한 번씩 다 더해봐야하는 브루트포스 알고리즘을 사용해야한다. 이를 위해 반복문 for문을 이용해서 답을 맞추도록 한다.
'백준 > C' 카테고리의 다른 글
백준 15829번 : Hashing [C] (0) | 2022.08.03 |
---|---|
백준 10250번 : ACM 호텔 [C] (0) | 2022.08.03 |
백준 2292번 : 벌집 [C] (0) | 2022.08.02 |
백준 2231번 : 분해합 [C] (0) | 2022.08.02 |
백준 4153번 : 직각삼각형 [C] (0) | 2022.08.02 |