입력 코드
#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;
}
반복문을 여러개 써서 모든 경우의 수를 다 돌린다고 한다.
↓↓↓ 참고한 사이트
[C 언어] 백준 2798. 블랙잭
2798. 블랙잭 (누르면 해당 문제로 이동) 세 장의 카드를 고르는 모든 경우를 고려하는 문제 제약사항) 시간 : 1 초 메모리 : 128 MB 문제) 카지노에서 제일 인기 있는 게임 블랙잭의 규칙은 상당히 쉽
mjeong9316.tistory.com
백준 2798번 블랙잭
백준 2798번 블랙잭 백준 문제 대충 카지노 어쩌고 블랙잭 어쩌고저쩌고 하면서 문제가 나와있습니다. 근데 그냥 요약해보면 N장의 카드 3장을 더해서 한도 M에 가장 가까운 값을 찾는 것입니다. 2
lazykarr.tistory.com
문제 출처
2798번: 블랙잭
첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장
www.acmicpc.net
'C' 카테고리의 다른 글
#21. [백준_C언어] 11050 : 이항 계수 1 (0) | 2021.01.09 |
---|---|
#20. [백준_C언어] 10250 : ACM 호텔 (0) | 2021.01.08 |
#18. [백준_C언어] 1259 : 팰린드롬수 (0) | 2021.01.07 |
#17. [백준_C언어] 1085 : 직사각형에서 탈출 (0) | 2021.01.07 |
#16. [백준_C언어] 11720 : 숫자의 합 (0) | 2021.01.06 |