BOJ 2798[백준 2798]
#algorithm#baekjoon#brute-force2019.08.22
조건
- N(3 <= N <= 100)개의 카드가 주어진다.
- 딜러가 숫자 M(10 <= M <= 300,000)을 외친다.
- 합이 M을 넘지 않는 카드 3장을 찾을 수 있는 경우만 주어진다.
결과
- M을 넘지 않으면서 M에 최대한 가까운 카드 3장의 합.
해결 방법
- 브루트포스 알고리즘으로, 모든 경우를 다 해본다.
- 카드를 정렬한다.
- 카드를 처음부터 3개를 선택하여 합을 구한다. 이 후 한장씩 바꿔가면서 합을 구한다.
- 카드의 합이 M보다 같거나 작고, 이전에 선택했는 카드의 합보다 크거나 같다면 결과 값을 대체한다.
핵심 코드
int result = 0;
for(int i = 0; i < N-2; i++) {
for(int j = i+1; j < N-1; j++) {
for(int k = j+1; k < N; k++) {
int sum = card[i] + card[j] + card[k];
if(sum <= M && result <= sum) {
result = sum;
}
}
}
}
전체 소스 코드는 여기서 확인하실 수 있습니다.
끝까지 읽어주셔서 감사합니다.