본문 바로가기
프로그래머스

프로그래머스 혼자서 하는 틱택토

by 콩순이냉장고 2023. 12. 14.

문제 URL : https://school.programmers.co.kr/learn/courses/30/lessons/160585

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

틱택토의 룰에맞게 게임이 진행됐는지 확인하는 문제입니다.

비기든 이기든 아직게임중인지 상관없습니다.

규칙에 맞는지만 확인하면됩니다.

 

O가 선공이고 X가 후공이니

반드시 선공은 X보다 하나 많거나 같거나 입니다.

X는 절대로 O보다 많을수는 없구

 

그리고 게임이 끝날경우

O가 이겼다면 O는 반드시 X보다 하나 많은상태에서 이겨야 맞는게임입니다.

X가 이겼다면 x는 반드시 O와 같은 개수를 가질겁니다.

 

이러한 경우로 가로줄,세로줄 대각선을 탐색해서

해당조건문에 반대 조건으로 코딩을하든 같은조건을하든 상관이 없습니다.

 

소스코드:

 

 

import sys
def iswrong(o,x,do):
    if do=='.': return False
    if do =='O' and o>x:
        return False
    elif do =='X' and o==x:
        return False
    return True
 
def solution(board):
    o,x=0,0
    for i in range(3):
        for j in range(3):
            if board[i][j]=='O':
                o+=1
            elif board[i][j]=='X':
                x+=1
    if o-x>1 or x>o :return 0

    for i in range(3):
        if len(set(board[i][:])) ==1 and iswrong(o,x,board[i][0]):
            return 0
    s1,s2="",""
    for i in range(3):
        s = ""
        for j in range(3):
            s+=board[j][i]
        if len(set(s)) ==1 and iswrong(o,x,s[0]):
            return 0
        s1+=board[i][i]
        s2+=board[i][2-i]
    if len(set(s1)) ==1 and iswrong(o,x,s1[0]):
        return 0
    if len(set(s2)) ==1 and iswrong(o,x,s2[0]):
        return 0
    return 1

 

 

 

 

 

궁금한점 혹은 모르는점 어떤질문이든 댓글은 언제나 환영입니다.