모든 항목을 검사하는 방법 : 브루트 포스
주어진 N개의 자연수 중에서 세 개를 뽑는다.
경우의 수를 따져서 모든 항목을 검사하여 최댓값 M에 가장 가까운 수를 출력하는 문제이다.
생각의 흐름대로 가다보니 삼중for문을 사용하는 방식으로 가긴 했다만..
물론 다른 방법도 있지만 삼중for문이 가장 적당한 풀이법 같았다.
원초적인 방법이고 처음 써보려니 막힌다.
내가 작성한 정답코드는 다음과 같다.
#include <iostream>
using namespace std;
//1. 세 수를 더해서 21 이상은 걸러
//2. 거른수중에서 최댓값
int main(){
int N, M, q, w, e, sum, goal = 0;
int min = 9999999;
int a[100] ={0};
cin>>N>>M;
for(int i =0;i < N;i++){
cin>>a[i];
}
for(int j = 0;j < N -2 ; j++){
q = a[j];
for(int k = j + 1;k < N -1;k ++ ){
w = a[k];
for(int l = k+ 1; l < N ;l++){
e = a[l];
sum = q +w +e;
if(M - sum < min && M - sum >= 0){
min = M - sum;
goal = sum;
}
}
}
}
cout<<goal;
return 0;
}
중간에 알아보기 쉽게 전개해놓은게 있어서, 원한다면 더 간단하게 줄일 수 있다.
'코딩 > 백준 알고리즘' 카테고리의 다른 글
백준 2805번 : 나무 자르기 (0) | 2024.05.12 |
---|---|
백준 2750번 : 수 정렬하기 (0) | 2022.02.20 |
백준 5622번 : 다이얼 (0) | 2022.02.15 |
백준 11720번 : 숫자의 합 (0) | 2022.02.15 |
백준 1546번 : 평균 (0) | 2022.02.15 |