본문 바로가기
프로그램/Python 1000제

Pytyon 332제] 파이썬 EXPRESS CHAPTER 6. 도전문제 (2) p296

by 건티 2025. 1. 30.
728x90

출처 : 반크_설과 대보름

 

참고풀이]

board= [[' ' for x in range (3)] for y in range(3)]
bCount=[[0 for x in range (4)] for y in range(4)]
Step=0
bRight=0

# 게임 보드를 그린다.
def Board_Print():
    for r in range(3):
        print("  " + board[r][0] + "|  " + board[r][1] + "|  " + board[r][2])
        if (r != 2):
            print("---|---|---")

#board의 합을 0으로 셋팅한다.
def Board_Clear():
    global bRight
    for i in range(3):
        bCount[3][3]=0 #좌측대각선합
        bRight=0 #우측대각선 합
        for j in range(3):
            bCount[i][3]=0 #가로합
            bCount[3][j]=0 #세로합

#board의 합을 구한다.
def Hab():
    global bRight
    for i in range(3):
        bCount[3][3]+=bCount[i][i] #좌측대각선합
        bRight+=bCount[i][2-i] #우측대각선 합
        for j in range(3):
            bCount[i][3]+=bCount[i][j] #가로합
            bCount[3][j]+=bCount[i][j] #세로합

#Main_Part()
while True:
    Board_Print()

    if Step>=9:
        print("사용자와 컴퓨터가 비겼습니다")
        break
    Step+=1

    # 사용자로부터 좌표를 입력받는다. 
    x = int(input("다음 수의 x좌표를 입력하시오: "))
    y = int(input("다음 수의 y좌표를 입력하시오: "))

    # 사용자가 입력한 좌표를 검사한다. 
    if board[y][x] != ' ':
        print("잘못된 위치입니다. ")
        continue
    else:
        board[y][x] = 'X'
        bCount[y][x]=1

    #board의 합을 구한다.
    Hab()

    #사용자의 승리여부를 체크한다.
    if bCount[y][3]==3 or bCount[3][x]==3 or bCount[3][3]==3 or bRight==3:
        Board_Print()
        print("사용자가 승리하였습니다")
        break

    #컴퓨터가 놓을 위치를 결정한다.
    #사용자가 놓은 위치를 체크하여 1개일 때와 2개일때를 구분하여
    #놓을 위치를 결정한다.
    Step+=1
    done =False
    if bCount[y][3]==2 or bCount[y][3]==-2 : #방어와 공격 부분
        for x in range(3):
            if board[y][x]== ' ':
                board[y][x]='O'
                bCount[y][x]=-1
                break
    elif bCount[3][x]==2 or bCount[3][x]==-2:
        for y in range(3):
            if board[y][x]== ' ':
                board[y][x]='O'
                bCount[y][x]=-1
                break
    elif bCount[3][3]==2 or bCount[3][3]==-2:
        for i in range(3):
            if board[i][i]==' ':
                board[i][i]='O'
                bCount[i][i]=-1
                break
    elif bRight==2 or bRight==-2:
        for i in range(3):
            if board[i][2-i]==' ':
                board[i][2-i]='O'
                bCount[i][2-i]=-1
                break
    else:
        for i in range(3):
            for j in range(3):
                if board[i][j] == ' ' and not done:
                    board[i][j] = 'O'
                    bCount[i][j]= -1
                    done=True
                    break
            if done: break

    #board의 합을 0으로 셋팅한다.
    Board_Clear()

    #board의 합을 구한다.
    Hab()
            
    #컴퓨터의 승리여부를 체크한다.
    if bCount[y][3]==-3 or bCount[3][x]==-3 or bCount[3][3]==-3 or bRight==-3:
        Board_Print()
        print("컴퓨터가 승리하였습니다")
        break
                           
    #board의 합을 0으로 셋팅한다.
    Board_Clear()

 

참고풀이 결과]

 

 

 

 

 

대한민국의 아름다운 영토, 독도의 겨울

 

반응형

댓글