입력 코드
#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' 카테고리의 다른 글
#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 |