입력할 때 실시간으로 중복 검출하는 부분에서 많은 고민이 있었다.
뭔가 코드가 좀 난잡해진 것 같은 기분이다...
#include<iostream>
#include<string>
#include<time.h>
using namespace std;
int main()
{
string bingo[5][5]; //빙고 배열
string input; //입력값 변수
int x = 0, y = 0; //출력 도와줄 변수
bool isGoob = true; //중복 검출용 변수
int success = 0, count = 0; //빙고 확인용 변수
//빙고 입력
while (x < 5 && y < 5) //입력 다되면 while문 종료 조건
{
cout << "x : " << x << ", y : " << y << " 칸 입력 -> ";
cin >> input;
isGoob = true;
//중복확인
for (int y = 0; y < 5; y++)
{
for (int x = 0; x < 5; x++)
{
if (bingo[x][y] == input)
{
cout << "다시 입력" << endl;
isGoob = false;
}
}
}
//중복검출용 변수 확인
if (isGoob)
bingo[x][y] = input;
else
continue;
//반복을 위한 증감식
if (x != 4)
{
x++;
}
else
{
y++;
x = 0;
}
}
cout << "=============================" << endl;
//3빙고 시 종료조건
while (success < 3)
{
//빙고 출력
for (int y = 0; y < 5; y++)
{
for (int x = 0; x < 5; x++)
{
if (bingo[x][y] == "!@#$%")
{
cout << "X" << "\t";
}
else
{
cout << bingo[x][y] << "\t";
}
}
cout << endl << endl;
}
cout << "빙고 개수 : " << success << endl;
cout << "입력 -> ";
cin >> input;
//중복입력 체크
isGoob = false;
for (int y = 0; y < 5; y++)
{
for (int x = 0; x < 5; x++)
{
if (bingo[x][y] == input)
{
bingo[x][y] = "!@#$%";
isGoob = true;
}
}
}
if (!isGoob) //중복 시 출력
{
cout << "다시 입력" << endl << endl;
continue;
}
//반복을 위해 success변수 초기화
success = 0;
//가로
for (int y = 0; y < 5; y++)
{
count = 0;
for (int x = 0; x < 5; x++)
{
if (bingo[x][y] == "!@#$%")
{
count++;
}
}
if (count == 5)
{
success++;
}
}
//세로
for (int x = 0; x < 5; x++)
{
count = 0;
for (int y = 0; y < 5; y++)
{
if (bingo[x][y] == "!@#$%")
{
count++;
}
}
if (count == 5)
{
success++;
}
}
//대각선
int countL = 0;
int countR = 0;
for (int x = 0; x < 5; x++)
{
if (bingo[x][x] == "!@#$%")
{
countL++;
}
if (countL == 5)
{
success++;
}
if (bingo[4 - x][x] == "!@#$%")
{
countR++;
}
if (countR == 5)
{
success++;
}
}
}
cout << success << "빙고 완성!!!!" << endl;
cout << "프로그램 종료합니다." << endl;
cin >> input;
}
2.0 ver Patch Note
배열 초기화 및 중복검출 부분 코드 재정립
필요 없는 변수 삭제 및 새로운 변수 추가
#include<iostream>
#include<string>
using namespace std;
int main()
{
string bingo[5][5]; //빙고 배열
string input; //입력값 변수
bool isGoob = true; //중복 검출용 변수
int success = 0, count = 0; //빙고 확인용 변수
for (int y = 0; y < 5; y++)
{
for (int x = 0; x < 5; x++)
{
//중복검출 반복횟수용 변수
int index = y * 5 + x;
cout << "x : " << x << ", y : " << y << " -> ";
cin >> input;
isGoob = true;
//현재 입력이 될 위치 바로 전까지의 값들과 비교
for (int i = 0; i < index; i++)
{
//(0,0)위치부터 시작하기 위한 변수
int _x = i % 5;
int _y = i / 5;
if (bingo[_x][_y] == input)
{
cout << "중복" << endl;
isGoob = false;
break;
}
}
//중복일 때 실행
if (!isGoob)
{
x--; //다음 위치로 넘어가지 않게 하려고 감소
continue;
}
//중복이 아니면 그때 초기화
bingo[x][y] = input;
}
}
cout << "=============================" << endl;
//3빙고 시 종료조건
while (success < 3)
{
//빙고 출력
for (int y = 0; y < 5; y++)
{
for (int x = 0; x < 5; x++)
{
if (bingo[x][y] == "!@#$%")
{
cout << "X" << "\t";
}
else
{
cout << bingo[x][y] << "\t";
}
}
cout << endl << endl;
}
cout << "빙고 개수 : " << success << endl;
cout << "입력 -> ";
cin >> input;
cout << "========================================" << endl;
//중복입력 체크
isGoob = false;
for (int y = 0; y < 5; y++)
{
for (int x = 0; x < 5; x++)
{
if (bingo[x][y] == input)
{
bingo[x][y] = "!@#$%";
isGoob = true;
}
}
}
if (!isGoob) //중복 시 출력
{
cout << "다시 입력" << endl << endl;
continue;
}
//반복을 위해 success변수 초기화
success = 0;
//가로
for (int y = 0; y < 5; y++)
{
count = 0;
for (int x = 0; x < 5; x++)
{
if (bingo[x][y] == "!@#$%")
{
count++;
}
}
if (count == 5)
{
success++;
}
}
//세로
for (int x = 0; x < 5; x++)
{
count = 0;
for (int y = 0; y < 5; y++)
{
if (bingo[x][y] == "!@#$%")
{
count++;
}
}
if (count == 5)
{
success++;
}
}
//대각선
int countL = 0;
int countR = 0;
for (int x = 0; x < 5; x++)
{
if (bingo[x][x] == "!@#$%")
{
countL++;
}
if (countL == 5)
{
success++;
}
if (bingo[4 - x][x] == "!@#$%")
{
countR++;
}
if (countR == 5)
{
success++;
}
}
}
cout << success << "빙고 완성!!!!" << endl;
cout << "프로그램 종료합니다." << endl;
cin >> input;
}