-
3중 for문을 이용하여, 모든 경우의 수를 다 점검하여, 최적의 값 즉 3개의 합이 M에 가장 가까운 값을 고르는 방식 이용. 만약 M에 일치하는 값이 나오면 이미 최적의 수이므로, 반복문을 종료 하기로 하였다.
#include <iostream> #include <vector> using namespace std; int main() { int n, m; int sum = 0; cin >> n >> m; vector<int> arr; for (int i = 0; i < n; i++) { int tmp; cin >> tmp; arr.push_back(tmp); } for (int i = 0; i < n; i++) { for (int j = i+1; j < n; j++) { for (int k = j+1; k < n; k++) { int tmp2 = arr[i] + arr[j] + arr[k]; if (m - tmp2 < m - sum && tmp2 <= m) { sum = tmp2; if (sum == m) break; } } } } cout << sum << endl; return 0; }
'코딩문제 > 백준' 카테고리의 다른 글
1978 : 소수찾기 (0) 2020.07.13 9613 : GCD 합 (0) 2020.07.13 1934 : 최소공배수 (0) 2020.07.13 2748 피보나치수 (0) 2020.07.09