코딩/백준

[python] 백준 17281 야구

마은마음 2023. 3. 9. 18:36

17281번: ⚾ (acmicpc.net)

 

17281번: ⚾

⚾는 9명으로 이루어진 두 팀이 공격과 수비를 번갈아 하는 게임이다. 하나의 이닝은 공격과 수비로 이루어져 있고, 총 N이닝 동안 게임을 진행해야 한다. 한 이닝에 3아웃이 발생하면 이닝이 종

www.acmicpc.net

from itertools import permutations

N = int(input())

ablity = [list(map(int,input().split())) for _ in range(N)]
permu = [1,2,3,4,5,6,7,8]
result=0

for combi in permutations(permu,8):
    combi=list(combi)
    combi.insert(3,0) #항상 0번 1번은 4번째

    ru1=False
    ru2=False
    ru3=False
    out=0
    cur = 0 #현재 몇 번 주자
    count=0.
    current_ru=0

    while current_ru<N:
        if(out==3):
            ru1=False #루에 있는 주자 초기화
            ru2=False
            ru3=False
            current_ru+=1 #이닝+
            if(current_ru==N):
                result = max(result,count)
                break
            out=0
           
        if(cur==9):
            cur=0  
        ab=ablity[current_ru][combi[cur]]
        if(ab==1): #안타이면
            if(ru3):
                count+=1 #점수 +1
                ru3=False
            if(ru2):
                ru2=False
                ru3=True
            if(ru1):
                ru2=True
            ru1=True
        elif(ab==2): #2루타
            if(ru3):
                count+=1
                ru3=False
            if(ru2):
                count+=1
            if(ru1):
                ru3=True
                ru1=False
            ru2=True
        elif(ab==3): #3루타
            if(ru3):
                count+=1
            if(ru2):
                count+=1
                ru2=False
            if(ru1):
                count+=1
                ru1=False
            ru3=True
        elif(ab==4): #홈런
            if(ru3):
                count+=1
                ru3=False
            if(ru2):
                count+=1
                ru2=False
            if(ru1):
                count+=1
                ru1=False
            count+=1
        else: #아웃
            out+=1
        cur+=1

print(int(result))