코딩/문제

코딩 시험 6번 class화

Hun die 2022. 6. 16. 12:52

https://fite9.tistory.com/20?category=1027019 

 

코딩 시험

1. 포인터와 레퍼런스를 활용해 함수 외부에서 선언된 두 정수형 변수의 값을 서로 바꾸는 Swap 함수를 각각 구현하시오 void Swap(int* a, int* b)//포인터 { int c = *a; *a = *b; *b = c; } void Swap(int& a,..

fite9.tistory.com

 

6번 문제 카드 배분하기

 

Card.h

class Deck
{
	static bool usecard[53];
	static const std::string mark[4];
	static const std::string num[13];
public:

	bool pick()
	{
		int count = 0;

		for (int i = 0; i < 53; i++){
			if (usecard[i] == false){
				count++;

				if (count > 7){
					break;
				}
			}
		}
		for (int i = 0; i < 7; i++)//덱 초기화
		{
			_deck[i] = 0;
		}
		if (count < 7){
			return false;
		}
		for (int i = 0; i < 7; i++){
			int random;
			do {
				random = rand() % 53;
			
			}while (usecard[random] != false);
			
			_deck[i] = random;
			usecard[random] = true;
		}
		return true;
	}

	void draw()
	{
		for (int i = 0; i < 7; i++){
			if (_deck[1] == _deck[2]){
				std::cout << "카드 부족";
				return;
			}
			if (_deck[i] != 52){
			std::cout << mark[_deck[i] % 4] << num[_deck[i] % 13];
			}
			else{
				std::cout << "JOKER";
			}
			std::cout << "\t";
		}
	}
private:
	int _deck[7];
};

bool Deck::usecard[53] = { false };
const std::string Deck::mark[4] = {"♠","♥","◆","♣"};
const std::string Deck::num[13] = { "A ","2 ","3 ","4 ","5 ","6 ","7 ","8 ","9 ","10","J ","Q ","K " };

헤더에 만든 클래스

 

실행

	Deck a;
	a.pick();
	a.draw();

 

 

카드 부족을 만들기 위해 8번 반복 (7장 뽑기 * 8번  > 총 카드수(53) )

	for (int i = 0; i < 8; i++)
	{
	Deck a;
	a.pick();
	a.draw();
	std::cout << std::endl;
	}

 

 

카드를 각각 0 ~ 52 까지의 숫자로 표현하여 출력을 하는데 여기서 카드의 중복을 체크하기위해 bool usecard[53]을 만들었다.

그리고 뽑힌 카드는 False 에서 True로 변하게 되는데 이 코드에서는 False를 True로 만드는 함수는 존재하지만, True에서 False로 만드는 함수는 존재하지 않기에 계속 쓰다보면 모든 카드가 True가 되어버리고 카드 부족으로인해 카드를 뽑지 못하게 된다.

그렇게 카드를 뽑지 못하게되면 더이상 쓸수없는 클래스가 되어버리기에  bool usecard[53]를 전부 false로 초기화 시켜주는 함수를 만들어야겠다는 생각이 들어 아래의 함수를 추가했다.

 

static void reset()
	{
		for (int i = 0; i < 53; i++)
		{
			usecard[i] = false;
		}
	}

 

Deck::reset();

 

 

'코딩 > 문제' 카테고리의 다른 글

백준 10828 스택  (0) 2022.06.28
코딩 시험 8번 class화  (0) 2022.06.20
코딩 시험 7번 class화  (0) 2022.06.16
코딩 시험  (0) 2022.06.15
코딩 연습 [모의고사]  (0) 2022.06.08