728x90
코드
#include <stdio.h>
main() {
int n, m, arr[100]; //arr: 카드를 담는 배열
int sum = 0, res = 0; //sum: 카드 3장의 합, res: m을 넘지 않으면서 m에 최대한 가까운 카드 3장의 합
scanf("%d%d", &n, &m);
for (int i = 0; i < n; i++)
scanf("%d", &arr[i]);
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++) { //세번째 카드 뽑기
sum = arr[i] + arr[j] + arr[k];
if (sum <= m && res < sum)
res = sum;
}
printf("%d", res);
}
설명
우선 n과 m을 입력 받고, for문을 이용해 n개의 카드를 입력 받는다.
n개의 카드 중 3장을 뽑아 더하는 것은 삼중 for문을 이용한다.
첫번째로 i번째 카드를 뽑고, i+1번째 카드와 i+2번째 카드를 뽑는다. 그리고 세 카드의 숫자를 더한 값을 sum에 저장한다. 만약 sum이 m보다 작거나 같고 res보다 크면 res를 sum의 값으로 업데이트한다.
그리고 다시 카드를 뽑는데, 이번에는 i번째 카드, i+1번째 카드, i+3번째 카드를 더한다. 이런식으로 모든 경우의 수를 계산한다.
삼중 for문의 실행이 모두 끝나면 res를 출력한다.
728x90
'C & C++ > BOJ' 카테고리의 다른 글
[백준] 5597번: 과제 안 내신 분..? (0) | 2021.03.12 |
---|---|
[백준] 3046번: R2 (0) | 2021.03.12 |
[백준] 10809번: 알파벳 찾기 (0) | 2021.03.04 |
[백준] 1834번: 나머지와 몫이 같은 수 (0) | 2021.03.04 |
[백준] 1731번: 추론 (0) | 2021.03.03 |