문제출처: https://www.acmicpc.net/problem/11507


문제

최근에 진솔이는 로봇 공학을 하기 시작했다. 그래서 포커 카드가 완전한 세트인지 확인하는 로봇을 만들기로 결심했다.

그는 프로그램을 작성하는 일을 분담했다. 그 프로그램은 카드의 모양(스페이드(♠), 하트(♡), 다이아몬드(♢), 클럽(♣))을 인식하는 것이다. 문제를 간단하게 하기 위해서 모든 카드는 하나의 모양과 하나의 숫자를 가진다고 가정한다.

여기서 그 모양은 실제 그림 대신 문자로 대체한다. P,K,H,T에 해당한다. 그리고 숫자는 1~13에 해당하는 정수이다. 로봇은 각각의 카드를 TXY의 형태로 '카드 이름'을 정하는데 T는 모양에 해당하고 XY는 숫자에 해당한다. 만약 만약 숫자가 1자리 숫자이면 X=0에 해당한다. ex) 01.

만약에 모양이 P이고 숫자가 9이면 P09이다.

완벽한 카드 한 세트는 52개로 이루어져 있다. (4 (모양)x 13(숫자))

로봇은 모든 카드의 '카드이름'을 읽고 문자열 S로 결합한다.

이제 진솔이가 프로그래밍 하는 것을 도와주자.  문자열을 읽어 얼마나 많은 카드를 잃어버렸는지 세면 된다.

만약에 2개의 같은 카드가 존재한다면 GRESKA이라고 출력하면 된다.



입력

오직 1줄만 문자열 S(1 ≤ |S| ≤ 1000)가 들어온다. 이것은 현재 가지고 있는 카드 이름에 해당한다.


출력

만약 똑같은 카드가 존재한다면 GRESKA을 출력한다.

그렇지 않으면 4개의 정수를 공백 문자로 구분하여 출력한다. 각각 P, K, H, T에 해당한다.


풀이

이런 구현문제를 어렵다고 생각하는분들은(저같은) 노트에 간단하게라도 어떻게 배열, 변수등을 선언하고 계산해서 출력할까?라고 생각하고 그 적어둔것을 코드로 옮겨보시고 생각은 되는데 막상 코드작성이 안되는 분들은 다른 분들의 코드를 보고 배우는게 좋을것같고 '이게맞는것같은데 코드가 왜 안돌아가지?' 싶으신분들은 거기서 더 생각하고 고민하는 노력을 해보세요.(확실히 노트에 적어보고 고민하고 하다보니 코드작성 때 수월하고 대충 이렇게 코드짜겟다고 적은걸 코드로 적어가다보니 여유가 생기네요.)


이 문제의 핵심은 각 문자(p,k,h,t)별로 1~13까지의 카드의 셈 횟수를 담을 2차원배열(중복되면 greksa출력해야함)을 선언하고, 입력된 카드의 수를 세기위한 1차원배열의 선언이라고 생각합니다. 딱히 어려운건 없고 39행에서 중복된 같은 카드가 생겼을 때 greksa를 출력하고 종료하는 코드를 작성함으로써 문제 조건을 만족시킬 수 있습니다. 코드를 보면 이해가 쉬울거에요. 


코드

#include<iostream>
#include<string>
using namespace std;
int card_num[4];
int card[4][14];
int main()
{
//스페이드:P 하트:K 다이아:H 클럽:T
	string s;
	cin >> s;
	char a;
	int b, c, d;
	int temp = 0;
	for (int i = 0; i < s.size(); i += 3)
	{
		a = s[i];
		b = s[i + 1] - '0';
		c = s[i + 2] - '0';
		d = b * 10 + c;
		switch (a)
		{
		case 'P':
			temp = 0;
			break;
		case 'K':
			temp = 1;
			break;
		case 'H':
			temp = 2;
			break;
		case 'T':
			temp = 3;
			break;
		}
		//만약 같은 수가 있다면 greksa출력
		//card[][]=1이면 greksa출력
		card[temp][d]++;
		card_num[temp]++;
		if (card[temp][d] == 2) 
		{
			cout << "GRESKA" << endl;
			return 0;
		}
	}
		for (int i = 0; i < 4; i++)
		{
			cout << 13 - card_num[i] << " ";
		}
		cout << endl;
	
	
}


결과

'문제풀이(BOJ) > 시뮬레이션(구현)' 카테고리의 다른 글

[백준 1120] 문자열  (0) 2020.01.09
[백준 2526] 싸이클  (0) 2020.01.09
[백준 9455] 박스  (0) 2020.01.08
[백준 12759] 틱!택!토!  (0) 2020.01.08
[백준 2578] 빙고  (0) 2020.01.06

+ Recent posts