๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŒฑ/๐ŸŒฑ์—ฐ์Šต๐ŸŒฑ

221208_๋น™๊ณ ๊ฒŒ์ž„+์Šฌ๋ผ์ด๋“œํผ์ฆ

by Nessie! 2022. 12. 8.

๊ณผ์ œ :
1. ๋น™๊ณ ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ
1) 5 * 5 2์ฐจ์› ๋ฐฐ์—ด ๋งŒ๋“ค๊ธฐ
2) 1~100์‚ฌ์ด์˜ ๋žœ๋ค์ˆซ์ž๋ฅผ ์ค‘๋ณต ์—†์ด ์ฑ„์›Œ ๋„ฃ๊ธฐ
3) 2์ฐจ์› ๋ฐฐ์—ด์„ ํ™”๋ฉด์— ์ถœ๋ ฅ

01 02 58 82 92
~
~
~
~
4) ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•ด์„œ ๋ฐฐ์—ด์— ์ผ์น˜ํ•˜๋Š”๊ฒŒ ์žˆ์œผ๋ฉด 0์ด๋‚˜ ํŠน์ˆ˜๋ฌธ์ž๋กœ ๋ฐ”๊พธ๊ธฐ
5) ๋น™๊ณ  ๊ฐฏ์ˆ˜ ์ฒดํฌํ•ด์„œ 5๊ฐœ ์ด์ƒ ๋น™๊ณ ๊ฐ€ ์™„์„ฑ๋˜๋ฉด ๊ฒŒ์ž„ ํด๋ฆฌ์–ด

------------------------------------------------

๊ณ ๊ธ‰: ๋ฐฐ์—ด ์ถœ๋ ฅ์„ ๋‹ค ๊ฐ€๋ฆฌ๊ณ  ์‹œ๋„ํšŸ์ˆ˜ ์ถ”๊ฐ€ํ•ด์„œ 
ํšŸ์ˆ˜์•ˆ์— ๋น™๊ณ  ๋งž์ถ”๋ฉด ๊ฒŒ์ž„ํด๋ฆฌ์–ด

------------------------------------

2. ์Šฌ๋ผ์ด๋“œ ํผ์ฆ๊ฒŒ์ž„
1. n * n 2์ฐจ์› ๋ฐฐ์—ด ๋งŒ๋“ค๊ธฐ

2. 0๋ถ€ํ„ฐ n * n - 1 ๊นŒ์ง€ ๋ฐฐ์—ด ์ฑ„์›Œ๋„ฃ๊ธฐ
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15

3. w, a, s, d๋ฅผ ์ž…๋ ฅํ•ด์„œ 0๋ฒˆ์„ ์ƒํ•˜ ์ขŒ์šฐ๋กœ ์ด๋™ํ•˜๊ธฐ

4. ๋žœ๋ค์œผ๋กœ 0๋ฒˆ์„ ๋งŽ์ด ์ด๋™ ์‹œ์ผœ์„œ ์…”ํ”Œํ•˜๊ธฐ

5. ๊ฒŒ์ž„ ์‹œ์ž‘ํ•˜๋ฉด 0๋ฒˆ์„ ์›€์ง์—ฌ์„œ ์ฒ˜์Œ ๋ชจ์–‘์œผ๋กœ ๋งž์ถ”๋ฉด ๊ฒŒ์ž„ ํด๋ฆฌ์–ด

---------------------------------
๊ณ ๊ธ‰: ์‹œ๊ฐ„์ œํ•œ

 

 

๋น™๊ณ ๊ฒŒ์ž„ โ–ผ

๋”๋ณด๊ธฐ
์‹œ์ž‘
๊ฒŒ์ž„์‹คํŒจ
๊ฒŒ์ž„ ํด๋ฆฌ์–ด

์•ˆ๋ณด์ด๋Š”๊ฑด ๋งž์ถ”๊ธฐ๊ฐ€ ์–ด๋ ค์›Œ์„œ ๋ฐฐ์—ด ๋ณด์ด๊ฒŒํ•˜๊ณ  ์ดฌ์˜ํ–ˆ์Šต๋‹ˆ๋‹ค.. ใ…Žใ…Ž;

#include <iostream>
#include <time.h>
#include <Windows.h>
using namespace std;

typedef unsigned int uint;

#define LENGTH 5
#define MIN_NUMBER 1
#define MAX_NUMBER 100
#define MAX_CLEAR_NUM 5
#define MAX_ATTEMP_NUM 30

void SetArrayNumbers(uint* arr, uint bingo[][LENGTH]);
void PrintArray(uint arr[][LENGTH]);
void CheckInputNumber(uint arr[][LENGTH]);
void CheckBingo(uint arr[][LENGTH], uint& rowCheck, uint& colCheck, uint& diagUpCheck, uint& diagDownCheck, uint& bingoCount);
bool PrintResult(uint& attempCount, const uint& bingoCount);
void Shuffle(uint* arr);

//i * 5 + j

int main()
{
    srand(time(NULL));

    uint numArray[MAX_NUMBER] = {};
    uint bingoArray[LENGTH][LENGTH] = {};
    uint bingoCount = 0;

    uint rowCheck, colCheck, diagUpCheck, diagDownCheck;
    uint attempCount = 0;

    SetArrayNumbers(numArray, bingoArray);    //๋ฐฐ์—ด์— ๋žœ๋ค๊ฐ’ ๋„ฃ๊ธฐ

    while (true)
    {

        CheckInputNumber(bingoArray);       //์ž…๋ ฅ๋ฐ›์•„์„œ ๋งž์€๊ฒŒ ์žˆ๋Š”์ง€ ์ฒดํฌ
        PrintArray(bingoArray);             //๋น™๊ณ ํŒ ์ถœ๋ ฅ
        CheckBingo(bingoArray, rowCheck, colCheck, diagUpCheck, diagDownCheck, bingoCount);     //๋น™๊ณ  ์ฒดํฌํ•˜๊ธฐ
        
        if (!PrintResult(attempCount, bingoCount))
            return 0;
    }
    

}

void SetArrayNumbers(uint* arr, uint bingo[][LENGTH])
{
    for (uint i = 0; i < MAX_NUMBER; i++)
    {
         arr[i] = i + 1;
    }

    Shuffle(arr);

    for (uint i = 0; i < LENGTH; i++)
    {
        for (int j = 0; j < LENGTH; j++)
        {
            bingo[i][j] = arr[i * 5 + j];
        }

    }
}

void PrintArray(uint arr[][LENGTH])
{
    system("cls");

    for (uint i = 0; i < LENGTH; i++)
    {
        for (uint j = 0; j < LENGTH; j++)
        {
            if (arr[i][j] == 0)
                cout << "ใ…‡ ";
            else
                cout << "?? ";
                //printf("%.2d ", arr[i][j]);
        }
        cout << endl;
    }
}

void CheckInputNumber(uint arr[][LENGTH])
{
    uint input;

    cout << "1~100 ์‚ฌ์ด ๊ฐ’์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š” : ";
    cin >> input;

    for (uint i = 0; i < LENGTH; i++)
    {
        for (uint j = 0; j < LENGTH; j++)
        {
            if (arr[i][j] == input)
            {
                arr[i][j] = 0;
                break;
            }
        }
    }
}

//๋น™๊ณ  ์ฒดํฌํ•˜๊ธฐ
void CheckBingo(uint arr[][LENGTH], uint& rowCheck, uint& colCheck, uint& diagUpCheck, uint& diagDownCheck, uint& bingoCount)
{
    bingoCount = 0;
    diagUpCheck = 0;
    diagDownCheck = 0;

    for (uint i = 0; i < LENGTH; i++)
    {
        rowCheck = 0;
        colCheck = 0;

        for (uint j = 0; j < LENGTH; j++)
        {
            if (arr[i][j] == 0)
                rowCheck++;

            if (arr[j][i] == 0)
                colCheck++;

            if (rowCheck == 5)
                bingoCount++;
            if (colCheck == 5)
                bingoCount++;
        }

        if (arr[i][i] == 0)
            diagDownCheck++;

        if (arr[i][LENGTH - 1 - i] == 0)
            diagUpCheck++;

        if (diagDownCheck == 5)
            bingoCount++;

        if (diagUpCheck == 5)
            bingoCount++;
    }

    cout << "๋น™๊ณ  ๊ฐœ์ˆ˜: " << bingoCount << endl;
}

bool PrintResult(uint& attempCount, const uint& bingoCount)
{
    cout << ++attempCount << "๋ฒˆ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚จ์€ ์‹œ๋„ํšŸ์ˆ˜๋Š” " << MAX_ATTEMP_NUM - attempCount << endl;

    if (attempCount == MAX_ATTEMP_NUM)
    {
        cout << "๊ฒŒ์ž„ ์‹คํŒจ" << endl;
        return false;
    }

    if (bingoCount >= 5)
    {
        cout << "๊ฒŒ์ž„ ํด๋ฆฌ์–ด" << endl;
        return false;
    }

    return true;
}


void Shuffle(uint* arr)
{
    for (int i = 0; i < 1000; i++)
    {
        int sour = rand() % MAX_NUMBER;
        int dest = rand() % MAX_NUMBER;

        int temp;
        temp = arr[sour];
        arr[sour] = arr[dest];
        arr[dest] = temp;
    }
}

 

์Šฌ๋ผ์ด๋“œํผ์ฆโ–ผ

๋”๋ณด๊ธฐ
ํด๋ฆฌ์–ด ํ™”๋ฉด

๋งž์ถ”๊ธฐ ์–ด๋ ค์›Œ์„œ ๊ทธ๋ƒฅ ์ •๋ ฌํ•˜๊ณ  ์ฐ์—ˆ์Šต๋‹ˆ๋‹ค..;

 

https://youtu.be/ciVQUZlEOdE

#include <iostream>
#include <time.h>
#include <conio.h>
#include <Windows.h>
using namespace std;

//i * 5 + j

struct ZeroInex
{
	int i;
	int j;
};

void Swap(int &sour, int &dest);
void Shuffle(int** arr, const int& inputArrSize);
void SetArray(int** array, const int& inputArrSize);
void PrintArray(int** array, const int& inputArrSize);
void FindZero(int** array, const int& inputArrSize, ZeroInex& zeroIndex);
bool CheckAnswer(int** array, const int& inputArrSize);


int main()
{
	srand(time(NULL));

	cout << "๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”: ";

	int inputArrSize;

	cin >> inputArrSize;
	
	int** array = NULL;
	int* a = new int[3];

	array = new int* [inputArrSize];

	ZeroInex zeroIndex;

	for (int i = 0; i < inputArrSize; i++)
	{
		array[i] = new int[inputArrSize];
		//*(array + i) = new int[inputArrSize];
	}

	SetArray(array, inputArrSize);
	Shuffle(array, inputArrSize);
	PrintArray(array, inputArrSize);

	int inputKey;

	FindZero(array, inputArrSize, zeroIndex);		//0์˜ ์œ„์น˜๋ฅผ ์ฐพ๋Š”๋‹ค

	while (true)
	{

		if (_kbhit())//ํ‚ค๋ณด๋“œ๊ฐ€ ๋ˆŒ๋Ÿฌ์กŒ๋Š”์ง€ ์ฒดํฌ
		{
			inputKey = _getch();
			//w
			if (inputKey == 119)
			{
				system("cls");
				if (zeroIndex.i > 0)
				{
					Swap(array[zeroIndex.i][zeroIndex.j], array[zeroIndex.i - 1][zeroIndex.j]);

					zeroIndex.i--;
				}
			}

			//s
			if (inputKey == 115)
			{
				system("cls");
				if (zeroIndex.i < inputArrSize - 1)
				{
					Swap(array[zeroIndex.i][zeroIndex.j], array[zeroIndex.i + 1][zeroIndex.j]);

					zeroIndex.i++;
				}
			}

			//a
			if (inputKey == 97)
			{
				system("cls");
				if (zeroIndex.j > 0)
				{
					Swap(array[zeroIndex.i][zeroIndex.j], array[zeroIndex.i][zeroIndex.j - 1]);

					zeroIndex.j--;
				}
			}

			//d
			if (inputKey == 100)
			{
				system("cls");
				if (zeroIndex.j < inputArrSize - 1)
				{
					Swap(array[zeroIndex.i][zeroIndex.j], array[zeroIndex.i][zeroIndex.j + 1]);

					zeroIndex.j++;
				}
			}

			PrintArray(array, inputArrSize);
		}
		
		if (CheckAnswer(array, inputArrSize))
		{
			cout << "ํด๋ฆฌ์–ด!" << endl; 
			return 0;
		}

	}



}

void Swap(int& sour, int& dest)
{
	int temp;

	temp = sour;
	sour = dest;
	dest = temp;
}

void Shuffle(int** arr, const int& inputArrSize)
{
	for (int i = 0; i < 1000; i++)
	{
		int sour1 = rand() % inputArrSize;
		int sour2 = rand() % inputArrSize;
		int dest1 = rand() % inputArrSize;
		int dest2 = rand() % inputArrSize;

		Swap(arr[sour1][sour2], arr[dest1][dest2]);
		//Swap((*(*(arr + sour1) + sour2)), (*(*(arr + dest1) + dest2)));
	}
}

void SetArray(int** array, const int& inputArrSize)
{
	for (int i = 0; i < inputArrSize; i++)
	{
		for (int j = 0; j < inputArrSize; j++)
		{
			array[i][j] = i * 5 + j;
		}
	}
}


void PrintArray(int** array, const int& inputArrSize)
{
	for (int i = 0; i < inputArrSize; i++)
	{
		for (int j = 0; j < inputArrSize; j++)
		{
			printf("%.2d ", array[i][j]);
		}
		cout << endl;
	}
}

void FindZero(int** array, const int& inputArrSize, ZeroInex& zeroIndex)
{
	for (int i = 0; i < inputArrSize; i++)
	{
		for (int j = 0; j < inputArrSize; j++)
		{
			if (array[i][j] == 0)
			{
				zeroIndex.i = i;
				zeroIndex.j = j;
				break;
			}
		}
	}
}

bool CheckAnswer(int** array, const int& inputArrSize)
{
	int checkCount = 0;

	for (int i = 0; i < inputArrSize; i++)
	{
		for (int j = 0; j < inputArrSize; j++)
		{
			if (array[i][j] == i * 5 + j)
				checkCount++;
		}
	}

	if (checkCount == inputArrSize * inputArrSize)
		return true;

	return false;
}

 

 

 

 

๋Œ“๊ธ€