알고리즘/SW Expert Academy
9778. 카드 게임
혬혬
2020. 5. 19. 00:07
728x90
Solution
그냥 문제 그대로 코딩하면 Pass 할 수 있습니다. 저는 계산을 줄이고자 하다가 오류를 많이 만났습니다.
- 데이터를 받으면서 list[카드의 수의 값을 가집니다. / 인덱스는 카드의 크기입니다]의 배열에서 갯수를 감소시켜줍니다. -> 각 크기에 따른 남은 카드의 수를 알 수 있습니다.
- 현재 승현이가 가진 카드의 총합을 알기위해 sum을 계산해줍니다.
- 이제 sum 변수는 승현이가 21을 만들기 위해 남은 크기를 의미하는 변수로 의미가 변경됩니다.
- list를 sum까지 돌면서 승현이가 뽑을 수 있는 카드 수를 s로 계산합니다. -> 여기서 sum까지 도는 이유는 list의 인데스는 카드의 크기이기 때문입니다.
- g 변수를 계산해줍니다. g는 승현이가 뽑으면 안되는 카드의 갯수입니다.
- 대소관계를 구별하여 정답을 출력해주면 됩니다.
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<vector>
using namespace std;
int main(void) {
int tc = 0;
cin >> tc;
for (int p = 0; p < tc; p++) {
int amount = 0;
cin >> amount;
int sum = 0;
int list[] = { 0,0,4,4,4,4,4,4,4,4,15,4 };
int box = 0;
for (int i = 0; i < amount; i++) {
cin >> box;
list[box]--;
sum += box;
}
sum = 21 - sum;
int s = 0;
int g = 0;
for (int i = 0;i <= sum; i++) {
s+=list[i];
}
g = 52 - amount - s;
cout << "#" << p + 1<<" ";
if (g>= s)
cout << "STOP"<<endl;
else
cout << "GAZUA"<<endl;
}
return 0;
}
728x90