알고리즘/baekjoon

[ baekjoon ] 틱택토 7682번 ( python )

Yanoo 2021. 5. 29. 16:24
728x90
반응형

문제

백준 7682 틱택토 풀이 ( 파이썬 )

https://www.acmicpc.net/problem/7682

 

7682번: 틱택토

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 줄은 9개의 문자를 포함하며, 'X', 'O', '.' 중 하나이다. '.'은 빈칸을 의미하며, 9개의 문자는 게임판에서 제일 윗 줄 왼쪽부터의 순서이다. 입

www.acmicpc.net

 

 

풀이

O가 이기려면 X와 O의 개수가 같을 때 뿐이고

X가 이기려면 X의 개수가 O보다 1개 많을 때이다.

이걸 생각하고 경우를 나눴다.

def flag(arr,equ):
    #print(arr,equ)
    if arr[0][0]==arr[0][1]==arr[0][2]==equ:
        return True
    if arr[1][0]==arr[1][1]==arr[1][2]==equ:
        return True
    if arr[2][0]==arr[2][1]==arr[2][2]==equ:
        return True
    if arr[0][0]==arr[1][0]==arr[2][0]==equ:
        return True
    if arr[0][1]==arr[1][1]==arr[2][1]==equ:
        return True
    if arr[0][2]==arr[1][2]==arr[2][2]==equ:
        return True
    if arr[0][0]==arr[1][1]==arr[2][2]==equ:
        return True
    if arr[2][0]==arr[1][1]==arr[0][2]==equ:
        return True
    return False
    

while True:
    string=input()
    if string=="end":
        break
    else:
        xcnt=0
        ocnt=0
        index=0
        arr=[[0]*3 for _ in range(3)]
        for i in range(3):
            for j in range(3):
                arr[i][j]=string[index]
                if string[index]=="X":
                    xcnt+=1
                if string[index]=="O":
                    ocnt+=1
                index+=1
        if xcnt>ocnt+1:
            print("invalid")
            continue
        if ocnt>xcnt:
            print("invalid")
            continue
        if ocnt==xcnt:
            if flag(arr,"O") and not flag(arr,"X"):
                print("valid")
                continue
        if ocnt+1==xcnt:
            if flag(arr,"X") and not flag(arr,"O"):
                print("valid")
                continue
        if xcnt==5 and ocnt==4:
            if not flag(arr,"O"):
                print("valid")
                continue
        print("invalid")

728x90
반응형