본문 바로가기
공부

스트링 활용 빙교 풀이

by MY블로그 2022. 10. 26.

과제로 했던 코드와 비교하며 복습하기.

지역변수 bool 이용과 불값을 이용한 플래그 사용방법 꼭 확인하기.

#include<iostream>
#include<string>
using namespace std;

int main()
{
	string bingo[5][5];
	string input;
	int count = 0;

	for (int y = 0; y < 5; y++)
	{
		for (int x = 0; x < 5; x++)
		{
			int index = y * 5 + x; //0~24까지 25개배열 전체 지정
			cout << "좌표의 이름을 정해주세요.";
			cout << "[" <<"X :" << x << "]" << " "<< "["<<"Y :" << y << "] : ";
			cin >> input;

			bool isChecking = false; //중복검출용 불값 = 거짓 지정
			for (int i = 0; i < index; i++) // index = y*5+x = x.y 0.0~4.4 (즉,전체범위)
				//전체범위바로이전까지만 포문을돌리는이유는 중복검사는 입력값 바로 이전가지검사하면되기때문
			{
				int _x = i % 5; //i(0~24/총25개)를 5로나눈 나머지값 01234 01234 01234 01234 01234
				int _y = i / 5; //i(0~24/총25개)를 5로나눈 값 00000 11111 22222 33333 44444
				//가로 전체 세로 전체 !
				if (bingo[_x][_y] == input) //만약 _x축 _y축 중에 입력값과 같은값이있다면
				{
					cout << "중복" << endl; //중복이라 출력되며
					isChecking = true; //체크의 값을 참 으로 바꾼다.
					break; //체크값이 참으로 바뀐채로 포문을 빠져나간다.
				}
			}
			if (isChecking) //만약 체크값이면 x값을 -1시키고 다시입력받는다.
			{
				x--; //y가 -가아니고 x가-인 이유는 출력순서가 x먼저이기때문.
				continue;
			}
			bingo[x][y] = input;
		}
	}
	system("cls");
	while (count <3) //반복문 조건 = 카운트(빙고)가3줄 되기전까지 반복 3줄=탈출
	{
		    for (int y = 0; y < 5; y++)
		    {
			    for (int x = 0; x < 5; x++)
			    {
				    cout << bingo[x][y] << "\t";  // x5 y5 줄사이탭간격의 숫자출력
			    }
			    cout << endl; // x축 5자리출력후 줄바꾸기
		    }
			cout << endl;
			cout << "현재 빙고 개수 : " << count << endl;
			cout << endl;
		    cout << "입력 : ";  // 입력안내 출력
		    cin >> input; // 입력, 인풋은 스트링이므로 숫자&문자 입력가능.

		    if (input == "X" || input == "x") //예외처리. 선택된자리는 x처리할것이므로 x문자입력예외처리
		    {
			    cout << "다른 문자를 입력해 주세요." << endl;
			    continue; //안내문출력후 다시입력
		    }

		    bool isChecking = false; //위에서 입력때와같은방식으로 불값 지역변수다시선언.
		    for (int y = 0; y < 5; y++)
		    {
			    for (int x = 0; x < 5; x++)
			    {
				    if (bingo[x][y] == input) //빙고판의값이 인풋값과 같다면 "X" 문자로 바꾼다.
					    bingo[x][y] = "X";
				    isChecking = true; //빙고를 X로바꾸고 불값은 참으로
			    }
		    }
		    if (!isChecking) //만약 참이아니라면(거짓이라면)
		    {
			    cout << "중복" << endl; //중복 출력
			    continue; //다시입력 받기로
		    }

		    count = 0; //빙고 카운트를 위한 초기화 . 카운트 조건 시작
		    for (int y = 0; y < 5; y++) // 가로 카운트 
		    {
			    int countX = 0; // 가로 카운트 숫자 0 초기화
			    for (int x = 0; x < 5; x++)
			    {
				    if (bingo[x][y] == "X") countX++; // 가로 X갯수 확인
				    if (countX == 5) count++; // 가로 x가 5개면 빙고1개 카운트
			    }
		    }
		    for (int x = 0; x < 5; x++) // 세로 카운트 
		    {
			    int countY = 0; // 세로 카운트 숫자 0 초기화
			    for (int y = 0; y < 5; y++)
			    {
				    if (bingo[x][y] == "X") countY++; // 세로 X갯수 확인
				    if (countY == 5) count++; // 세로 x가 5개면 빙고1개 카운트
			    }
		    }
	
	    //대각선 카운트
	    int countZL = 0; //좌-우방향 카운트용 정수 초기화
	    int countZR = 0;//우-좌방향 카운트용 정수 초기화
	    for (int i = 0; i < 5; i++)
	    {
		    if (bingo[i][i] == "X") countZL++; //좌-우방향은 좌표가 0,0/1.1/2.2/3.3/4.4 같은수
		    if (countZL == 5) count++; //5개면 빙고 카운트+
		    if(bingo[i][4-i] == "X") countZR++; //우-좌방향은 좌표가 4.0/3.1/2.2/1.3/0.4 
		    if (countZR == 5) count++; //5개면 빙고 카운트+
	    }
		system("cls");
    }
    cout << "3빙고 게임 종료." << endl;

	return 0;
}

'공부' 카테고리의 다른 글

달팽이 배열 알고리즘  (0) 2022.10.26
메모리의 관리(구조/스택프레임/동적할당)  (2) 2022.10.26
스트링 활용 빙고  (0) 2022.10.26
숫자 빙고 게임  (0) 2022.10.24
숫자 슬라이드 퍼즐 게임  (0) 2022.10.23

댓글