-
2798.블랙잭알고리즘/백준 BAEK JOON 2020. 4. 23. 01:34
이번문제는 블랙잭이다. 그냥 순열을 이용한 완전탐색으로 풀었다.
for문을 여러번 돌리거나 재귀함수를 써도 풀 수 있을 것 같다.
< Code 설명 >
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int n, m; cin >> n >> m; // 카드 갯수와 가장 가깝거나 같아야할 값 변수 vector<int> v; // 값이 저장되는 vector vector<int>check; // 사용할 v값을 check할 vector for(int i=0; i<n-3; i++) // 사용하지 않을 갯수를 vector에 채워넣는다. check.push_back(0); for(int i=0; i<3;i++) // 3장의 합이므로 vector값이 1인 경우 사용값 check.push_back(1); int tmp; for(int i=0; i<n; i++){ // 카드의 숫자 입력받기 cin >> tmp; v.push_back(tmp); // 입력값을 vector에 저장 } sort(v.begin(), v.end()); // 오름차순으로 정렬 int answer=0; // 정답이 저장될 변수 int sum=0; // 3장의 카드의 합이 저장될 변수 do{ for(int i=0; i<v.size(); i++){ if(check[i]==1) // 사용하는 값인 경우 sum+=v[i]; // 해당 카드 값을 sum에 더해줌 } if(sum<=m && sum>=answer) // sum이 근접카드값보다 작거나 같고 answer보다크면 answer=sum; // answer값 갱신 sum=0; // 다시 구해야하므로 0으로 초기화 }while(next_permutation(check.begin(),check.end())); // 다음 순열이 있으면 진행 cout << answer << "\n"; return 0; }
순열 사용법 참조: https://twpower.github.io/82-next_permutation-and-prev_permutation
반응형'알고리즘 > 백준 BAEK JOON' 카테고리의 다른 글
1094.막대기 (0) 2020.04.26 4948.베르트랑 공준 (0) 2020.04.25 2884.알람 시계 (0) 2020.04.21 2577.숫자의 개수 (0) 2020.04.21 1793.타일링 (0) 2020.04.20 댓글