출처 : 반크_설과 대보름
참고풀이]
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
while True:
# 게임 보드를 그린다.
for r in range(3):
print(" " + board[r][0] + "| " + board[r][1] + "| " + board[r][2])
if (r != 2):
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의 합을 구한다.
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] #세로합
#사용자의 승리여부를 체크한다.
if bCount[y][3]==3 or bCount[3][x]==3 or bCount[3][3]==3 or bRight==3:
for r in range(3):
print(" " + board[r][0] + "| " + board[r][1] + "| " + board[r][2])
if (r != 2):
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으로 셋팅한다.
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의 합을 구한다.
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] #세로합
#컴퓨터의 승리여부를 체크한다.
if bCount[y][3]==-3 or bCount[3][x]==-3 or bCount[3][3]==-3 or bRight==-3:
for r in range(3):
print(" " + board[r][0] + "| " + board[r][1] + "| " + board[r][2])
if (r != 2):
print("---|---|---")
print("컴퓨터가 승리하였습니다")
break
#board의 합을 0으로 셋팅한다.
for i in range(3):
bCount[3][3]=0 #좌측대각선합
bRight=0 #우측대각선 합
for j in range(3):
bCount[i][3]=0 #가로합
bCount[3][j]=0 #세로합
참고풀이 결과]
대한민국의 아름다운 영토, 독도의 가을
'프로그램 > Python 1000제' 카테고리의 다른 글
Python 333제] 2015년 한국정보올림피아드 시˙도 지역본선 초등부 문제. 쇠막대기 (0) | 2025.02.02 |
---|---|
Pytyon 332제] 파이썬 EXPRESS CHAPTER 6. 도전문제 (2) p296 (0) | 2025.01.30 |
Python 330제] 파이썬 EXPRESS CHAPTER 10. 도전문제 p474 (0) | 2024.11.11 |
Python 329제] 병합 정렬(Merge Sort) (0) | 2024.11.04 |
Python 328제] 버블정렬 (0) | 2024.10.31 |
댓글