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

Python 103제] 어파처! p287 도전문제

by 건티 2022. 11. 18.
728x90

출처 : 반크_세계유산 경복궁

 

참고풀이]

import random

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

#Main Part
N=0
while True:
    N+=1
    if N>4: break

    # 게임 보드를 그린다.
    Show()
    # 사용자로부터 좌표를 입력받는다.
    while True:
        x = int(input("다음 수의 x좌표를 입력하시오(열): "))
        y = int(input("다음 수의 y좌표를 입력하시오(행): "))

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

    #세번째, 직선, 대각선을 체크했을 때
    #사용자 값이 2개라면 그 마지막 위치에 컴퓨터 값을 넣는다.
    if N<2:
        #컴퓨터가 놓을 위치를 결정한다.
        #첫번째, 1행 1열이 비어있다면 그곳에 컴퓨터 값을 넣는다.
        #아니면 임의의 곳에 컴퓨터 값을 넣는다.
        if board[1][1]==' ':
            board[1][1] = 'O'
        else:
            while True:
                y=random.randint(0,2)
                x=random.randint(0,2)
                if board[y][x] != ' ':
                    continue
                else:
                    board[y][x]='O'
                    break
    else:
        chk=False #True
        while True:
            #행별 사용자 값이 2이면 그행 빈칸에 컴퓨터 값을 넣는다.
            for r in range(3):
                cnt=0
                for c in range(3):
                    if board[r][c]=='X':
                        cnt+=1
                if cnt==2:
                    for c in range(3):
                        if board[r][c]==' ':
                            board[r][c]='O'
                            chk=True
                            break
                elif cnt==3:
                    print("사용자가 이겼습니다.")
                    chk=True
                    break
                ccnt=0
                for c in range(3):
                    if board[r][c]=='X':
                        ccnt+=1
                if ccnt==3:
                    print("컴퓨터가 이겼습니다.")
                    chk=True
            if chk: break

            #열별 사용자 값이 2이면 그열 빈칸에 컴퓨터 값을 넣는다.
            for c in range(3):
                cnt=0
                for r in range(3):
                    if board[r][c]=='X':
                        cnt+=1
                if cnt==2:
                    for r in range(3):
                        if board[r][c]==' ':
                            board[r][c]='O'
                            chk=True
                            break
                elif cnt==3:
                    print("사용자가 이겼습니다.")
                    chk=True
                    break
                ccnt=0
                for r in range(3):
                    if board[r][c]=='X':
                        ccnt+=1
                if ccnt==3:
                    print("컴퓨터가 이겼습니다.")
                    chk=True
            if chk: break

            #우방향 대각선의 사용자 값이 2이면 그 대각선 빈칸에 컴퓨터 값을 넣는다.
            cnt=0
            for r in range(3):
                if board[r][r]=='X':
                    cnt+=1
            if cnt==2:
                for r in range(3):
                    if board[r][r]==' ':
                        board[r][c]='O'
                        chk=True
                        break
            elif cnt==3:
                print("사용자가 이겼습니다.")
                chk=True
                break
            ccnt=0
            for r in range(3):
                if board[r][r]=='X':
                    ccnt+=1
            if ccnt==3:
                print("컴퓨터가 이겼습니다.")
                chk=True
            if chk: break

            #좌방향 대각선의 사용자 값이 2이면 그 대각선 빈칸에 컴퓨터 값을 넣는다.
            cnt=0
            for r in range(3):
                if board[r][2-r]=='X':
                    cnt+=1
            if cnt==2:
                for r in range(3):
                    if board[r][2-r]==' ':
                        board[r][c]='O'
                        chk=True
                        break
            elif cnt==3:
                print("사용자가 이겼습니다.")
                chk=True
                break
            ccnt=0
            for r in range(3):
                if board[r][2-r]=='X':
                    ccnt+=1
            if ccnt==3:
                print("컴퓨터가 이겼습니다.")
                chk=True
            if chk: break

 

 

참고풀이 결과]

 

 

 

 

 

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

 

반응형

댓글