더블포인터로 2차원배열을 만들어서 각 함수의 매개변수로 활용하는 부분에서 조금 헷갈렸다.ㅠ
#include<iostream>
#include<string>
#include<time.h>
using namespace std;
//스왑함수
void Swap(int sour1, int sour2, int demp1, int demp2, int** bingo)
{
int temp = bingo[sour1][sour2];
bingo[sour1][sour2] = bingo[demp1][demp2];
bingo[demp1][demp2] = temp;
}
//셔플함수
void Shuffle(int size, int** bingo)
{
int sour1 = rand() % size;
int sour2 = rand() % size;
int demp1 = rand() % size;
int demp2 = rand() % size;
Swap(sour1, sour2, demp1, demp2, bingo);
}
int main()
{
srand(time(NULL));
int size, line = 0, input;
cout << "빙고판 사이즈를 입력해주세요 ex) 4 -> 4 x 4" << endl << "입력 : ";
cin >> size;
//빙고판 생성
int** bingo = new int* [size];
for (int i = 0; i < size; i++)
{
bingo[i] = new int[size];
}
//빙고판 초기화
for (int y = 0; y < size; y++)
{
for (int x = 0; x < size; x++)
{
bingo[x][y] = y * size + x;
}
}
//셔플
for (int i = 0; i < 1000; i++)
{
Shuffle(size, bingo);
}
while (line < 3)
{
cout << "빙고 개수 : " << line << endl;
//빙고판 출력
for (int y = 0; y < size; y++)
{
for (int x = 0; x < size; x++)
{
if (bingo[x][y] == -99)
{
cout << "X" << "\t";
}
else
{
cout << bingo[x][y] << "\t";
}
}
cout << endl << endl;
}
cout << "입력 : ";
cin >> input;
//input값 예외처리
if (input < 0 || input > ((size * size) - 1))
{
cout << "다시 입력해주세요" << endl;
continue;
}
//input값 검사 및 중복확인
bool isChecking = false;
for (int y = 0; y < size; y++)
{
for (int x = 0; x < size; x++)
{
if (input == bingo[x][y])
{
bingo[x][y] = -99;
isChecking = true;
}
}
}
if (!isChecking)
{
cout << "중복이거나 없습니다." << endl;
continue;
}
//빙고 개수 초기화(값 중첩 방지)
line = 0;
//가로빙고 검사
for (int y = 0; y < size; y++)
{
int count = 0;
for (int x = 0; x < size; x++)
{
if (bingo[x][y] == -99)
{
count++;
}
}
if (count == size)
{
line++;
}
}
//세로빙고 검사
for (int x = 0; x < size; x++)
{
int count = 0;
for (int y = 0; y < size; y++)
{
if (bingo[x][y] == -99)
{
count++;
}
}
if (count == size)
{
line++;
}
}
//대각선빙고 검사
int countL = 0;
int countR = 0;
for (int x = 0; x < size; x++)
{
if (bingo[x][x] == -99)
{
countL++;
}
if (countL == size)
{
line++;
}
if (bingo[(size - x) - 1][x] == -99)
{
countR++;
}
if (countR == size)
{
line++;
}
}
}
for (int i = 0; i < size; i++)
{
delete[size] bingo[i];
}
delete[] bingo;
cout << "축하합니다! " << line << "빙고 달성!!!" << endl;
cin >> input;
return 0;
}
2.0 Ver Patch Note
math.h 헤더파일을 추가하였습니다.
size * size 부분을 pow(size, 2)로 변경하였습니다.
Shuffle() 함수를 조금 수정하였습니다.
#include<iostream>
#include<string>
#include<time.h>
#include<math.h>
using namespace std;
//스왑함수
void Swap(int sour1, int sour2, int demp1, int demp2, int** bingo)
{
int temp = bingo[sour1][sour2];
bingo[sour1][sour2] = bingo[demp1][demp2];
bingo[demp1][demp2] = temp;
}
//셔플함수
void Shuffle(int size, int** bingo)
{
for (int i = 0; i < 1000; i++)
{
int sour1 = rand() % size;
int sour2 = rand() % size;
int demp1 = rand() % size;
int demp2 = rand() % size;
Swap(sour1, sour2, demp1, demp2, bingo);
}
}
int main()
{
srand(time(NULL));
int size, line = 0, input;
cout << "빙고판 사이즈를 입력해주세요 ex) 4 -> 4 x 4" << endl << "입력 : ";
cin >> size;
//빙고판 생성
int** bingo = new int* [size];
for (int i = 0; i < size; i++)
{
bingo[i] = new int[size];
}
//빙고판 초기화
for (int y = 0; y < size; y++)
{
for (int x = 0; x < size; x++)
{
bingo[x][y] = y * size + x;
}
}
//셔플
Shuffle(size, bingo);
while (line < 3)
{
cout << "빙고 개수 : " << line << endl;
//빙고판 출력
for (int y = 0; y < size; y++)
{
for (int x = 0; x < size; x++)
{
if (bingo[x][y] == -99)
{
cout << "X" << "\t";
}
else
{
cout << bingo[x][y] << "\t";
}
}
cout << endl << endl;
}
cout << "입력 : ";
cin >> input;
//input값 예외처리
if (input < 0 || input > (pow(size, 2) - 1))
{
cout << "다시 입력해주세요" << endl;
continue;
}
//input값 검사 및 중복확인
bool isChecking = false;
for (int y = 0; y < size; y++)
{
for (int x = 0; x < size; x++)
{
if (input == bingo[x][y])
{
bingo[x][y] = -99;
isChecking = true;
}
}
}
if (!isChecking)
{
cout << "중복이거나 없습니다." << endl;
continue;
}
//빙고 개수 초기화(값 중첩 방지)
line = 0;
//가로빙고 검사
for (int y = 0; y < size; y++)
{
int count = 0;
for (int x = 0; x < size; x++)
{
if (bingo[x][y] == -99)
{
count++;
}
}
if (count == size)
{
line++;
}
}
//세로빙고 검사
for (int x = 0; x < size; x++)
{
int count = 0;
for (int y = 0; y < size; y++)
{
if (bingo[x][y] == -99)
{
count++;
}
}
if (count == size)
{
line++;
}
}
//대각선빙고 검사
int countL = 0;
int countR = 0;
for (int x = 0; x < size; x++)
{
if (bingo[x][x] == -99)
{
countL++;
}
if (countL == size)
{
line++;
}
if (bingo[(size - x) - 1][x] == -99)
{
countR++;
}
if (countR == size)
{
line++;
}
}
}
for (int i = 0; i < size; i++)
{
delete[size] bingo[i];
}
delete[] bingo;
cout << "축하합니다! " << line << "빙고 달성!!!" << endl;
cin >> input;
return 0;
}
'코딩' 카테고리의 다른 글
섯다 (0) | 2022.11.03 |
---|---|
더블포인터 빙고 vs Computer (0) | 2022.11.01 |
포인터 별찍기 (0) | 2022.10.27 |
달팽이 배열 (0) | 2022.10.27 |
빙고 ver2(문자열) (2) | 2022.10.26 |