본문 바로가기
이것저것

SW 4047 영준이의 카드 카운팅 D3 (C++)

by 문자메일 2018. 3. 29.

#include <iostream>

#include <cstdio>

using namespace std;

#define MAX 14


void init();

void solve(int tc);


int T;

char SS[3001] = { 0, };

char S[MAX], D[MAX], H[MAX], C[MAX];

int numS, numD, numH, numC;

int main()

{

scanf(" %d", &T);

for (int tc = 1; tc <= T; tc++){

init();

cin >> &SS[1];

solve(tc);

}


return 0;

}


void init(){

for (int i = 0; i < MAX; i++){

S[i] = 0; D[i] = 0; H[i] = 0; C[i] = 0;

}

}


//입력 1줄씩 처리

void solve(int tc){

char deck=0;

int num=0;

bool error = false;

numS = 0; numD = 0; numH = 0; numC = 0;

for (int i = 1; !((i%3) == 1 && SS[i] == NULL); ){

if ((i % 3) == 1){ deck = SS[i];}

else if ((i % 3) == 2){ num += (SS[i]-48)*10; }

else{

num += SS[i]-48;

switch (deck){

case 'S':

S[num]++;

break;

case 'D':

D[num]++;

break;

case 'H':

H[num]++;

break;

case 'C':

C[num]++;

break;

}

deck = 0;

num = 0;

}

i++;

}

//해당 번호에 카드가 2개 이상 들어가있다면 에러 출력

for (int i = 1; i < MAX; i++){

if (S[i] > 1){ error = true; }

else if (S[i] == 1){ numS++; }

if (D[i] > 1){ error = true; }

else if (D[i] == 1){ numD++; }

if (H[i] > 1){ error = true; }

else if (H[i] == 1){ numH++; }

if (C[i] > 1){ error = true; }

else if (C[i] == 1){ numC++; }

}

if (error == true){

printf("#%d ERROR\n", tc);

}

else{

printf("#%d %d %d %d %d\n",tc, 13 - numS, 13 - numD, 13 - numH, 13 - numC);

}

}



'이것저것' 카테고리의 다른 글

백준 2178 미로탐색  (0) 2018.04.01
SW 4050 재광이의 대량 할인 [D4]  (0) 2018.03.30
SW 2814 최장 경로 [D3]  (0) 2018.03.27
SW 3809 화섭이의 정수 나열 [D3]  (0) 2018.03.25
모의 SW 등산로 조성 소스  (0) 2018.03.24

댓글