[ BOJ / Python ] 17281번 ⚾

황승환·2022년 9월 8일
0

Python

목록 보기
478/498

이번 문제는 permutations를 이용하여 해결하였다. 1번 선수는 무조건 4번 타자가 되어야 하므로 1부터 8까지의 수의 permutations를 구하고, 4번째 자리에 1번 선수를 넣어주었다. 그리고 이닝을 진행하며 타자의 번호를 cur 변수로 기억하고 아웃카운트를 세며 반복을 진행하였다. 이 탐색을 permutations의 모든 원소에 대하여 진행하여 그 중 가장 큰 값을 취하도록 하였다. 처음에는 deque()에 주자를 넣는 방식으로 구현하였는데, 시간초과가 발생하였고, 각각의 베이스를 변수로 관리하여 이를 해결하였다.

Code

from itertools import permutations
import sys
input = sys.stdin.readline
n = int(input())
hitter = [list(map(int, input().split())) for _ in range(n)]
answer = 0
def get_point(line_up):
    global answer
    cur = 0
    point = 0
    for inning in hitter:
        out = 0
        b1, b2, b3 = 0, 0, 0
        while out < 3:
            if inning[line_up[cur]] == 0:
                out += 1
            elif inning[line_up[cur]] == 1:
                point += b3
                b1, b2, b3 = 1, b1, b2
            elif inning[line_up[cur]] == 2:
                point += b2+b3
                b1, b2, b3 = 0, 1, b1
            elif inning[line_up[cur]] == 3:
                point += b1+b2+b3
                b1, b2, b3 = 0, 0, 1
            else:
                point += b1+b2+b3+1
                b1, b2, b3 = 0, 0, 0
            cur = (cur+1)%9
    return point
for line_up in list(permutations(range(1, 9), 8)):
    line_up = list(line_up[:3]) + [0] + list(line_up[3:])
    answer = max(answer, get_point(line_up))
print(answer)

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글