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
7번 문제 빙고 만들기
#define size 5
class Bingo
{
public:
void Init()
{
clear = 0;
for (int i = 0; i < size + size + 2; i++)
{
check[i] = false;
}
for (int i = 0; i < size * size; i++)
{
num[i] = false;
}
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
int random = rand() % (size * size);
if (num[random] == false)
{
num[random] = true;
bingo[i][j] = random + 1;
}
else
{
j--;
}
}
}
}
void Print()
{
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
if (bingo[i][j] != false)//int false값 = 0
{
std::cout << bingo[i][j] << "\t";
}
else
{
std::cout << "\t";
}
}
std::cout << std::endl << std::endl;
}
std::cout << "'0' 입력 시 재시작" << endl;
std::cout << "현재 " << clear << "줄의 빙고가 완성되었습니다." << std::endl;
std::cout << "숫자를 입력해 주세요 : ";
}
void Update(int input)
{
if (input == 0)
{
Init();
return;
}
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
if (bingo[i][j] == input)
{
bingo[i][j] = false;//인풋 값 false로 바꿈
break;
}
}
}
for (int i = 0; i < size; i++)
{
bool bingo_check = true;
for (int j = 0; j < size; j++)
{
if (bingo[i][j] != 0)// 하나라도 0이 아니면 false
{
bingo_check = false;
break;
}
}
if (bingo_check == true)
{
if (check[i] != true)
{
check[i] = true;
clear += 1;
}
}
}
//세로 빙고 처리
for (int i = 0; i < size; i++)
{
bool bingo_check = true;
for (int j = 0; j < size; j++)
{
if (bingo[j][i] != 0)// 하나라도 0이 아니면 false
{
bingo_check = false;
break;
}
}
if (bingo_check == true)
{
if (check[i + size] != true)
{
check[i + size] = true;
clear += 1;
}
}
}
//대각선 빙고 처리
{
bool bingo_check = true;
for (int i = 0; i < size; i++)
{
if (bingo[i][i] != 0)// 하나라도 0이 아니면 false
{
bingo_check = false;
break;
}
}
if (bingo_check == true)//true일때 값 체크
{
if (check[size * 2] != true)
{
check[size * 2] = true;
clear += 1;
}
}
}
{
bool bingo_check = true;
for (int i = 0; i < size; i++)
{
if (bingo[i][size - 1 - i] != 0)// 하나라도 0이 아니면 false
{
bingo_check = false;
break;
}
}
if (bingo_check == true)//true일때 값 체크
{
if (check[size * 2 + 1] != true)
{
check[size * 2 + 1] = true;
clear += 1;
}
}
}
}
private:
static bool num[size * size];
static int bingo[size][size];
static int clear;
static bool check[size + size + 2];
};
bool Bingo::num[size * size] = { false };
int Bingo::bingo[size][size] = { 0 };
bool Bingo::check[size + size + 2] = { false };
int Bingo::clear = 0;
using namespace std;
#include "Bingo.h"
int main(void)
{
Bingo a;
a.Init();//빙고 랜덤 세팅
while (true)
{
system("cls");
a.Print();//빙고판 표시
int input;
std::cin >> input;
a.Update(input);// 빙고 체크
}
}
값을 초기화 하고 빙고판 배열에 중복되지 않는 숫자 값을 넣어주는 Init 함수
빙고판과 아래 인터페이스를 출력하는 print 함수
빙고를 체크하고 입력한 숫자를 없애는 update로 나누어서 처리했다.
업데이트가 길어져서 가독성이 떨어져 가로 세로 대각선으로 나누어서 함수를 만들어도 된다고 했지만 안함
업데이트에 Init을 넣어서 0을 입력하면 초기화 하는 기능을 추가해 보았다.
Init 함수에 int 값을 받아서 받은 인트값의 크기 만큼 동적배열을 만들어 빙고판의 크기를 정하고 싶었으나 생각보다 바꿀 부분이 많아서 못했다.
'코딩 > 문제' 카테고리의 다른 글
백준 10828 스택 (0) | 2022.06.28 |
---|---|
코딩 시험 8번 class화 (0) | 2022.06.20 |
코딩 시험 6번 class화 (0) | 2022.06.16 |
코딩 시험 (0) | 2022.06.15 |
코딩 연습 [모의고사] (0) | 2022.06.08 |