초기 방법 - m과 같을 시 중지하기 위한 bool 인자와 if문 계산
#include <iostream>
using namespace std;
int main() {
int n, m, i, j, k, near_m, tmp=0;
bool com = false;
cin >> n >> m;
int arr[n];
for (i=0; i<n; i++){
cin >> arr[i];
}
for (i=0; i<n-2; i++){
near_m = arr[i];
for (j=i+1; j<n-1; j++){
near_m += arr[j];
for (k=j+1;k<n;k++){
near_m += arr[k];
if (near_m == m) {
tmp = near_m;
com = true;
break;
}
else {
if (near_m < m && near_m > tmp)
tmp = near_m;
near_m -= arr[k];
}
}
if (com) break;
else near_m -= arr[j];
}
if (com) break;
else near_m -= arr[i];
}
cout << tmp << endl;
}
모든 경우의 수를 다 계산해버리고 최종에서 결과 내는 방법
#include <iostream>
using namespace std;
int main() {
int n, m, i, j, k, s, t=0;
cin >> n >> m;
int arr[n];
for (i=0; i<n; i++) cin >> arr[i];
for (i=0; i<n-2; i++){
for (j=i+1; j<n-1; j++){
for (k=j+1;k<n;k++){
s = arr[i] + arr[j] + arr[k];
if (s <= m && s > t)t = s;
}
}
}
cout << t << endl;
}
#include <stdio.h>
int main() {
int n, m, i, j, k, s, t=0;
scanf("%d %d", &n, &m);
int a[n];
for (i=0;i<n;i++) scanf("%d", &a[i]);
for (i=0;i<n-2;i++){
for (j=i+1;j<n-1;j++){
for (k=j+1;k<n;k++){
s=a[i]+a[j]+a[k];
if (s<=m&&s>t)t = s;
}
}
}
printf("%d", t);
}
https://aigong.tistory.com/28?category=900998 참조