본문 바로가기
Algorithm(CodeTree, Python)/완전탐색1

[코드트리 자리 수 단위로 완전탐색] 오목 python

by kurooru 2022. 12. 1.
# table 입력
table = [
    list(map(int, input().split()))
    for _ in range(19)
]

# 함수들
# row_five(x, y)
def row_five(x, y):
    
    # 범위 내에 없으면 탈락
    if y >= 15:
        return False
    
    # flag
    flag = table[x][y]

    # 연속 다섯개중
    for i in range(1, 5):
        # 다른 게 있으면,
        if table[x][y+i] != flag:
            # 실패
            return False
    
    # 다 통과하면 성공
    return True

# col_five(x, y)
def col_five(x, y):

    # 범위 내에 없으면 탈락
    if x >= 15:
        return False
    
    # flag
    flag = table[x][y]

    # 연속 다섯개 중
    for i in range(1, 5):
        # 다른 게 있으면
        if table[x+i][y] != flag:
            # 실패
            return False
    
    # 다 통과하면 성공
    return True

# dia_five_1(x, y)
def dia_five_1(x, y):

    # 범위 내에 없으면 탈락
    if x >= 15 or y >= 15:
        return False
    
    # flag
    flag = table[x][y]

    # 연속 다섯개 중
    for i in range(1, 5):
        # 다른 게 있으면
        if table[x+i][y+i] != flag:
            # 실패
            return False
    
    # 다 통과하면 성공
    return True

# dia_five_2(x, y)
def dia_five_2(x, y):

    # 범위 내에 없으면 탈락
    if x >= 15:
        return False
    
    # flag
    flag = table[x][y]

    # 연속 다섯개 중
    for i in range(1, 5):
        # 다른게 있으면
        if table[x+i][y-i] != flag:
            # 실패
            return False
    
    # 다 통과하면 성공
    return True

# 설계
# 완전 탐색 시작
for i in range(19):
    for j in range(19):
        
        # 가로로 5개가 연결되어있으면,
        if table[i][j] and row_five(i, j):
            # 승자를 출력하고
            print(table[i][j])
            # 가운데 위치한 바둑알 위치 출력
            print(i+1, j+3)
            # 종료
            quit()
        
        # 세로로 5개가 연결되어있으면,
        elif table[i][j] and col_five(i, j):
            # 승자를 출력하고
            print(table[i][j])
            # 가운데 위치한 바둑알 위치 출력
            print(i+3, j+1)
            # 종료
            quit()

        # \ 모양으로 5개가 연결되어있으면,
        elif table[i][j] and dia_five_1(i, j):
            # 승자를 출력하고
            print(table[i][j])
            # 가운데 위치한 바둑알 위치 출력
            print(i+3, j+3)
            # 종료
            quit()
        
        # / 모양으로 5개가 연결되어있으면,
        elif table[i][j] and dia_five_2(i, j):
            # 승자를 출력하고
            print(table[i][j])
            # 가운데 위치한 바둑알 위치 출력
            print(i+3, j-1)
            # 종료
            quit()

# 승부가 결정되지 않은경우
print(0)