본문 바로가기
Algorithm/백준

[백준] 2798번 : 블랙잭 / c++

by 코딩친구 2020. 5. 27.
반응형

https://www.acmicpc.net/problem/2798

 

2798번: 블랙잭

문제 카지노에서 제일 인기 있는 게임 블랙잭의 규칙은 상당히 쉽다. 카드의 합이 21을 넘지 않는 한도 내에서, 카드의 합을 최대한 크게 만드는 게임이다. 블랙잭은 카지노마다 다양한 규정이 ��

www.acmicpc.net

 

 

[ 코드 ]

 

#include <iostream>
#include <vector>

using namespace std;

int main(){
  int N, M, temp;
  int sum = 0;
  int close = 0;
  vector <int> card;

  cin >> N >> M;

  for(int i=0; i<N; i++){
    cin >> temp;
    card.push_back(temp);
  }

  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 = card[i]+card[j]+card[k];

        if(sum<=M && sum>close){
          close = sum;
        }
      }
    }
  }

  cout << close << endl;

  return 0;
}

 

브루트포스 알고리즘 문제!

 

브루투포스란?

가장 간단한 알고리즘인, 모든 경우의 수를 검사하는 알고리즘.

 

이라고 백준에 명시되어있다. ㅎㅎ

정말 말그대로 무식하게 모든 경우의 수를 머리 속으로 생각하는 대로 옮기면 되는 알고리즘.

 

 

 

 

for문에서 N-2, N-1, N으로 그 뒤에 남아있는 카드 뽑아야하는 양을 체크해서 더 경우를 줄인건데

사실 그냥 N이라고 해도 알고리즘은 풀린다.

 

 

 

 

※ 오늘의 교훈

이 문제를 풀면서 습관적으로 int i, int j, int k로 지정하는 부분에서

첫번 째 선언문 부분은 잘 써놓고 조건문, 증감문에서 i로 써서 오류가 났는데 그걸 찾느라 정말 한참이 걸렸다.

간단한 실수를 줄이도록 노력해야겠다...! 

 

 

 

반응형