ascode 1125 삼목(tic-tac-toe) 게임 판정하기-Easy

2 분 소요

문제 설명

삼목(tic-tac-toe) 게임은 3x3 보드에서 두 사람이 번갈아 가며 돌을 두면서 같은 돌이 나란히 3개가 놓이면 이기는 게임이다.

삼목 게임이 정상적으로 종료되었을 때, 누가 이겼는지, 아니면 비겼는지를 판단하는 프로그램을 작성하시오. 입력은 1, 2로 들어오며 항상 1이 선수로 시작한다고 가정한다. 이 때 보드 상에 놓여진 1과 2의 위치를 판단하여 승부가 났다면 누가 이겼는지를 1, 2로 구별하여 출력한다. 만약 비긴 상태이면 draw!를 출력한다.

입력 설명

첫 줄에 테스트케이스 수(t, 1 <= t <= 10)가 입력된다. 다음 줄부터 보드의 상태를 나타내는 숫자 1, 2가 3 x 3 행렬 형태로 t 세트만큼 입력된다. 이 때, 1은 1번 선수가 둔 자리, 2는 2번 선수가 둔 자리를 의미한다.

출력 설명

각 테스트케이스별로 보드의 상태를 확인하여 승부가 결정되었다면 누가 이겼는지를 1 또는 2, 만약 비겼다면 draw! 를 한 줄에 하나씩 출력한다.

입력 예시

2
1 2 2
2 1 1
2 1 1
2 1 2
2 1 1
1 2 1

출력 예시

1
draw!

코드

#include <stdio.h>
 
int main(void)
{
    int testcase;
    int ar[3][3],set = 3;
    int temp1,temp2, i, j, count = 0;
    int x = 0, y = 0;

    scanf("%d", &testcase);
    
    for (int o = 0; o < testcase; o++)
    {
        int b, c;
        for ( b = 0; b < 3; b++)
        {
            for (c = 0; c < 3; c++)
            {
                scanf("%d", &ar[b][c]);
            }
        }
        //temp 초기화
        temp1 = 0;
        //가로 확인
        for (int v = 1; v <= 2; v++)
        {
            for (i = 0; i < set; i++)
            {
                temp1 = 0;
                for (j = 0; j < set; j++)
                {
                    if (ar[i][j] == v) {
                        temp1++;
                    }
                }
                //모두가 일치하면 카운트 하나 추가
                if (v == 1) {
                    if (temp1 == set) {
                        x++;
                        temp1 = 0;
                    }
                }
                else if ( v == 2) {
                    if (temp1 == set) {
                        y++;
                        temp1 = 0;
                    }
                }
            }
        }
        //세로 확인
        for (int v = 0; v <= 2;v++)
        {
            for (i = 0; i < set; i++)
            {
                temp1 = 0;
                for (j = 0; j < set; j++)
                {
                    if (ar[j][i] == v) {
                        temp1++;
                    }
                }
                if (v == 1) {
                    if (temp1 == set) {
                        x++;
                        temp1 = 0;
                    }
                }
                else if (v == 2) {
                    if (temp1 == set) {
                        y++;
                        temp1 = 0;
                    }
                }
            }
        }
        //1번째 대각선 확인
        //temp 초기화
        temp1 = 0;
        for (int i = 0; i < set; i++)
        {
            if (ar[i][i] == 1) {
                temp1++;
 
            }
            if (i == 2 && temp1 == set) {
                x++;
                temp1 = 0;
            }
        }
        //temp 초기화
        temp1 = 0;
        for (int i = 0; i < set; i++)
        {
            if (ar[i][set - i - 1] == 1) {
                temp1++;
            }
            if (i == 2 && temp1 == set) {
                x++;
                temp1 = 0;
            }
        }
        //2번재 대각선 확인
        //temp 초기화
        temp2 = 0;
        for (int i = 0; i < set; i++)
        {
            if (ar[i][i] == 2) {
                temp2++;
 
            }
            if (i == 2 && temp2 == set) {
                y++;
                temp2 = 2;
            }
        }
        //temp 초기화
        temp2 = 0;
        for (int i = 0; i < set; i++)
        {
            if (ar[i][set - i - 1] == 2) {
                temp2++;
 
            }
            if (i == 2 && temp2 == set) {
                y++;
                temp2 = 2;
            }
        }
        if (x != 0) {
            printf("1\n");
        }
        else if (y != 0) {
            printf("2\n");
        }
        else {
            printf("draw!\n");
        }
        x = 0, y = 0;
    }
    return 0;
}

나 : say

다음에는 숏코딩 해보겟습니디~

댓글남기기