[BOJ] 17281. โšพ๏ธ(์•ผ๊ตฌ) (๐Ÿฅ‡, ๊ตฌํ˜„)

lemythe423ยท2023๋…„ 7์›” 12์ผ
0

BOJ ๋ฌธ์ œํ’€์ด

๋ชฉ๋ก ๋ณด๊ธฐ
7/133
post-thumbnail

๋ฌธ์ œ

๋ญ ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋‹ค ์žˆ๋ƒ...

ํ’€์ด

โœ”๏ธ ํƒ€์ž์˜ ์ˆœ์„œ๋ฅผ ์ •ํ•ด์„œ
โœ”๏ธ ์ •ํ•ด์ง„ ๊ทœ์น™์„ ์ง€์ผœ์„œ N๋ฒˆ์˜ ์ด๋‹๊นŒ์ง€ ๊ฒฝ๊ธฐ ์ง„ํ–‰ํ•ด์„œ
โœ”๏ธ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค

๐Ÿšป ํƒ€์ž ์ˆœ์„œ ์ •ํ•˜๊ธฐ

4๋ฒˆ์งธ ํƒ€์ž๋Š” ๋ฌด์กฐ๊ฑด 1๋ฒˆ ์„ ์ˆ˜์—ฌ์•ผ ํ•œ๋‹ค

์‚ฌ์‹ค 9๋ช… ํƒ€์ž์˜ ์ˆœ์„œ๋ฅผ ๋‹ค ์ •ํ•˜๋ฉด ๋Œ€๋žต 36๋งŒ์ •๋„์ธ๋ฐ 1๋ช…์€ ์ด๋ฏธ ์ •ํ•ด์ ธ์žˆ๊ธฐ ๋•Œ๋ฌธ์— 8๋ช…๋งŒ ์ •ํ•˜๋ฉด ๋ผ์„œ ๋Œ€๋žต 4๋งŒ ์ •๋„๋กœ ์ค„์–ด๋“ ๋‹ค

์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋…ธ๊ฐ€๋‹ค๋กœ ๊ตฌํ–ˆ๊ณ  ๋‹น์—ฐํžˆ ์‹œ๊ฐ„์ดˆ๊ณผใ…Žใ…Ž

visited[0] = True
order[3] = 0
def perm(k):
    if k == 3:
        perm(4)
        return 
    
    if k == 9:
        baseball(order)
        return 

    for i in range(9):
        if visited[i] == False:
            order[k] = i
            visited[i] = True
            perm(k+1)
            order[k] = -1
            visited[i] = False

perm(0)

itertools ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ permutations(์ˆœ์—ด)์„ ์‚ฌ์šฉํ•ด์„œ 1์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์ˆซ์ž๋“ค๋กœ ์ˆœ์—ด์„ ๋งŒ๋“ค๊ณ  4๋ฒˆ์งธ ์ž๋ฆฌ์— 1๋ฒˆ์„ ๋ผ์›Œ๋„ฃ๋Š” ๋ฐฉ์‹์œผ๋กœ ๋งŒ๋“ค์–ด์•ผ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜์ง€ ์•Š์Œ

๐Ÿ• N๋ฒˆ์งธ ์ด๋‹๊นŒ์ง€ ๊ฒฝ๊ธฐ ์ง„ํ–‰

์ฒ˜์Œ์—” ์œ„์—์„œ ์žฌ๊ท€๋กœ ์ˆœ์—ด ๋งŒ๋“œ๋Š” ๋ฐฉ์‹์ฒ˜๋Ÿผ ํ•ด์„œ ํƒ€์ž์˜ ์ˆœ์„œ๊ฐ€ ๋‹ค ์ •ํ•ด์ง€๋ฉด baseball ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ ๊ฒŒ์ž„์„ ์ง„ํ–‰ํ•˜๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ ๋‹น์—ฐํžˆ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ใ…Žใ…Ž

โœ”๏ธ out์ด 3๋ฒˆ ๋ฐœ์ƒํ•˜๋ฉด ๋‹ค์Œ ์ด๋‹์œผ๋กœ
โœ”๏ธ ๋‹ค์Œ ์ด๋‹์œผ๋กœ ๋„˜์–ด๊ฐ€๋„ ํƒ€์ž์˜ ์ˆœ์„œ๋Š” ๊ณ„์† ์ด์–ด์ ธ์•ผ ํ•จ

์ด๋‹์ด N๋ฒˆ์„ ๋„˜๊ธธ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๊ฒฝ๊ธฐ๋ฅผ ๊ณ„์†ํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋•Œ ๋ฐ˜๋ณตํšŸ์ˆ˜๊ฐ€ ์ •ํ•ด์ ธ ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— while์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋จ. ์•„๋ž˜๋Š” ๊ฐ ์ ์ˆ˜๋ณ„๋กœ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ.

0๏ธโƒฃ ์•„์›ƒ : out 1์ฆ๊ฐ€
1๏ธโƒฃ ์•ˆํƒ€ : 1์นธ์”ฉ ์ด๋™, 3๋ฃจ ์„ ์ˆ˜ ์ ์ˆ˜ ์ถ”๊ฐ€, 1๋ฃจ์— ์„ ์ˆ˜ ์ถ”๊ฐ€
2๏ธโƒฃ 2๋ฃจํƒ€ : 2์นธ์”ฉ ์ด๋™, 2-3๋ฃจ ์„ ์ˆ˜ ์ ์ˆ˜ ์ถ”๊ฐ€, 2๋ฃจ์— ์„ ์ˆ˜ ์ถ”๊ฐ€
3๏ธโƒฃ 3๋ฃจํƒ€ : 3์นธ์”ฉ ์ด๋™, 1-2-3๋ฃจ ์„ ์ˆ˜ ์ ์ˆ˜ ์ถ”๊ฐ€, 3๋ฃจ์— ์„ ์ˆ˜ ์ถ”๊ฐ€
4๏ธโƒฃ ํ™ˆ๋Ÿฐ : 4์  ์ถ”๊ฐ€, ๋ชจ๋“  ๋ฃจ์— ์„ ์ˆ˜ ์—†์Œ

๋ถ„๊ธฐ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚˜๋ฉด out์ด 3์„ ๋„˜๋Š” ๊ฒฝ์šฐ inning 1์ถ”๊ฐ€, ๋ชจ๋“  ๋ฃจ์—์„œ ์„ ์ˆ˜ ์ œ๊ฑฐ, out 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์„ธ ๊ฐ€์ง€ ์ž‘์—…

์ตœ์ข… ์ฝ”๋“œ

โŒ ์‹œ๊ฐ„์ดˆ๊ณผ

1, 2, 3๋ฃจ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” base ๋ฐฐ์—ด์„ ๊ฐ€์ง€๊ณ  ๊ฐ ์ ์ˆ˜์— ๋Œ€ํ•ด์„œ ๋ฐฐ์—ด splice๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์งฐ๋Š”๋ฐ ๋„ˆ๋ฌด ๋‹น์—ฐํ•˜์„ธ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค ใ…Žใ…Ž

import sys
from itertools import permutations
input = sys.stdin.readline

N = int(input())
arr = [list(map(int, input().split())) for _ in range(N)]

ans = 0
def baseball(order):
    global ans
    out = inning = 0
    base = [0]*3
    
    now = score = 0
    while inning < N:
        inn = arr[inning][order[now]]

        if inn == 0:
            out += 1
        elif inn == 1: 
            score += base[0]
            base = base[1:] + [1]
        elif inn == 2:
            score += sum(base[:2])
            base = base[2:] + [1, 0]
        elif inn == 3:
            score += sum(base)
            base = [1, 0, 0]
        elif inn == 4:
            score += sum(base) + 1
            base = [0, 0, 0]

        now = (now+1)%9
        
        if out == 3:
            inning += 1
            base = [0, 0, 0]
            out = 0
        
        ans = max(ans, score)

for perm in permutations(range(1, 9)):
    order = list(perm[:3]) + [0] + list(perm[3:])
    baseball(order)

print(ans)

โญ•๏ธ ์ •๋‹ต ์ฝ”๋“œ

์ด๋Ÿฐ ์‹์œผ๋กœ ๊ฐ ๋ฃจ์— ์„ ์ˆ˜๊ฐ€ ์žˆ๋Š”์ง€ ์—†๋Š”์ง€ ํŒ๋ณ„ํ•˜๊ณ  ์„ ์ˆ˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•ด์„œ ๊ฐ๊ฐ์˜ ์ธ๋ฑ์Šค๋งˆ๋‹ค ์ฒ˜๋ฆฌ๋ฅผ ๋‹ค ๋”ฐ๋กœ ํ•ด์ค˜์•ผ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚˜์ง€ ์•Š์•˜๋‹ค.

from itertools import permutations

N = int(input())
arr = [list(map(int, input().split())) for _ in range(N)]

c=[1,2,3,4,5,6,7,8]
c_m=permutations(c,8)
ans = 0

for case in c_m:
    order = list(case)
    order.insert(3, 0)
    out = inning = player = score = 0
    base = [0]*3
    
    while inning < N:
        inn = arr[inning][order[player]]

        if inn == 0:
            out += 1
        elif inn == 1: # ์•ˆํƒ€
            if base[2] == 1:
                score += 1
                base[2] = 0
            if base[1] == 1:
                base[2] = 1
                base[1] = 0
            if base[0] == 1:
                base[1] = 1
            base[0] = 1
        elif inn == 2:
            if base[2] == 1:
                score += 1
                base[2] = 0
            if base[1] == 1:
                score += 1
                base[1] = 0
            if base[0] == 1:
                base[2] = 1
                base[0] = 0
            base[1] = 1
        elif inn == 3:
            if base[2] == 1:
                score += 1
                base[2] = 0
            if base[1] == 1:
                score += 1
                base[1] = 0
            if base[0] == 1:
                score += 1
                base[0] = 0
            base[2] = 1
        elif inn == 4:
            if base[2] == 1:
                score += 1
                base[2] = 0
            if base[1] == 1:
                score += 1
                base[1] = 0
            if base[0] == 1:
                score += 1
                base[0] = 0
            score += 1

        player = (player+1)%9
        
        if out == 3:
            inning += 1
            base = [0, 0, 0]
            out = 0
        
    ans = max(ans, score)
print(ans)
profile
์•„๋ฌด๋ง์ด๋‚˜ํ•˜๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€