일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 14500
- 러스트란 #cargo
- C
- 15652
- rust설치
- 10872
- 15650
- 9663
- 백트래킹
- 1259
- 백준
- C++
- 문제풀이
- rustup
- 14890
- 연산자 끼워넣기 성공
- 15683
- 14501
- 14891
- 14503
- 15651
- 분해합
- 13458
- 15649
- 13460
- 팰린드롬수
- 테트로미노
- 2798
- 3190
- 14888
Archives
Easy-So-Easy
[백준] 2798번 블랙잭 - C/C++ 본문
반응형
백준 2798 문제(Problem)
풀이(Solution)
이 문제는 브루트포스로 쉽게 풀 수 있는 문제이다. 문제에서 집고 가야 할 핵심 포인트는 'N장의 카드 중에서 3장의 카드를 뽑는다는 점'과 '고른 카드의 합은 M을 넘지 않으면서 최대한 가깝게'라는 점이다.
몇 장을 뽑아야 하는지는 이미 문제에서 나왔으니, 그리고 3장 밖에 뽑지 않으니 필자는 단순하게 3중 for문을 사용하였다. (3장 이상을 뽑아야 하거나 몇 장 뽑아야 하는지 나오지 않으면 재귀함수를 이용하는 것을 추천한다.)
각 케이스 마다 최대값과 비교하여 M을 넘지 않으면서 M에 최대한 가까운 값을 max 변수를 갱신함으로써 문제를 해결하였다.
번외: max 변수는 long long 타입으로 작성하지 않아도 된다. 하지만 필자는 최대값을 구하는 문제의 경우 습관적으로 적는다.
전체 코드(Code)
#include<iostream>
using namespace std;
int main(){
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int n, m, k; cin >> n >> m;
int arr[100] = {0,};
for(int i=0; i<n; i++)
cin >> arr[i];
long long max = 0;
for(int i=0; i<n-2; i++){
for(int j=i+1; j<n-1; j++){
for(int w=j+1; w<n; w++){
k = arr[i]+arr[j]+arr[w];
if(k>max && m>=k)
max = k;
}
}
}
cout << max;
}
반응형
'BaekJoon' 카테고리의 다른 글
[백준] 10872번 팩토리얼 - C/C++ (0) | 2023.06.22 |
---|---|
[백준] 2231번 분해합 - C/C++ (0) | 2023.06.22 |
[백준] 2580번 스도쿠 - C/C++ (0) | 2023.06.21 |
[백준] 9663번 N-Queen - C/C++ (0) | 2023.06.20 |
[백준] 15652번 N과 M (4) - C/C++ (0) | 2023.06.20 |