알고리즘/SW Expert Academy

9778. 카드 게임

혬혬 2020. 5. 19. 00:07
728x90

 

Solution

그냥 문제 그대로 코딩하면 Pass 할 수 있습니다. 저는 계산을 줄이고자 하다가 오류를 많이 만났습니다. 

  1. 데이터를 받으면서 list[카드의 수의 값을 가집니다. / 인덱스는 카드의 크기입니다]의 배열에서 갯수를 감소시켜줍니다. -> 각 크기에 따른 남은 카드의 수를 알 수 있습니다.
  2. 현재 승현이가 가진 카드의 총합을 알기위해 sum을 계산해줍니다.
  3. 이제 sum 변수는 승현이가 21을 만들기 위해 남은 크기를 의미하는 변수로 의미가 변경됩니다.
  4. list를 sum까지 돌면서 승현이가 뽑을 수 있는 카드 수를 s로 계산합니다. -> 여기서 sum까지 도는 이유는 list의 인데스는 카드의 크기이기 때문입니다.
  5. g 변수를 계산해줍니다. g는 승현이가 뽑으면 안되는 카드의 갯수입니다. 
  6. 대소관계를 구별하여 정답을 출력해주면 됩니다. 

 

#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;
}

 

 

 

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AXE0YJiK3QcDFAVX&categoryId=AXE0YJiK3QcDFAVX&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

728x90