[백준 17218] ⚾

2021. 5. 7. 21:45·알고리즘 문제풀이

www.acmicpc.net/problem/17281

 

17281번: ⚾

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

www.acmicpc.net

import itertools,sys

input = sys.stdin.readline
arr = [1,2,3,4,5,6,7,8]

p = itertools.permutations(arr, 8)

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

def game(start,t,arr):
    out = 0
    score = 0
    b1,b2,b3 = 0,0,0
    while True:
        if out == 3:
            break

        if t[arr[start]] == 0:
            out+=1
        elif t[arr[start]] == 1:
            score+=b3
            b1,b2,b3 = 1,b1,b2
        elif t[arr[start]] == 2:
            score +=(b2+b3)
            b1,b2,b3 = 0,1,b1
        elif t[arr[start]] == 3:
            score += (b1+b2+b3)
            b1,b2,b3 = 0,0,1
        elif t[arr[start]] == 4:
            score += (1+b1+b2+b3)
            b1,b2,b3 = 0,0,0
        
        start = (start+1)%9
    return start, score

def solve(arr,mat):
    start = 0
    total = 0
    for t in mat:
        start, score = game(start,t,arr) # 몇 번쨰 선수, 선수 정보, 선수 순서
        total += score
    return total

answer = 0
for i in p:
    l = list(i)
    l.insert(3,0)
    answer = max(solve(l,mat),answer)

print(answer)

풀이

먼저 순열을 통해 선수 순서 목록을 모두 생성한다.

4번타자는 1번선수가 치기로 정해져 있으니 나머지 선수들만 정해주면 된다.

8명이니 40320개의 후보가 나온다.

 

40320개의 선수 리스트를 모두 시뮬레이션 돌려 최댓값을 찾으면 된다.

 

방법이 같더라도 최적화가 덜 되면 문제가 틀린다.

base부분을 deque로 만들어 pop, appendleft 로 구현했을 때는 시간초과가 나왔다.

변수의 수를 줄이고, base를 직접 값을 대입하는 방식으로 바꾸니 시간내에 통과했다.

 

하지만 구랻ㅎ python으로는 아무도 통과 못한 문제다. pypy를 사용하자

 

시간복잡도

이닝의 수가 N이라고 하자.

1개의 이닝은 최대 3회 안에 끝난다. (out이 최소 1개 포함되어있기 때문)

선수수가 9명일때 한명씩 게임을 하므로 1이닝에 최대 9*3*N 시간이 걸린다. 즉

시간복잡도는 40320 * O(27N), 상수 생략하면 O(N)이다.

'알고리즘 문제풀이' 카테고리의 다른 글

[2021 KAKAO BLIND RECRUITMENT] 합승 택시 요금  (0) 2021.05.08
[2018 KAKAO BLIND RECRUITMENT] 셔틀버스  (0) 2021.05.08
[백준 1013] Contact  (0) 2021.05.07
[백준 2257] 화학식량  (0) 2021.05.07
[백준 5347] LCM (최소공배수)  (0) 2021.05.07
'알고리즘 문제풀이' 카테고리의 다른 글
  • [2021 KAKAO BLIND RECRUITMENT] 합승 택시 요금
  • [2018 KAKAO BLIND RECRUITMENT] 셔틀버스
  • [백준 1013] Contact
  • [백준 2257] 화학식량
WildDevmon
WildDevmon
『앗! 야생의 개발몬(이)가 나타났다!』
  • WildDevmon
    야생의 개발몬
    WildDevmon
  • 전체
    오늘
    어제
    • 분류 전체보기 (35)
      • Server (5)
      • 알고리즘 문제풀이 (27)
      • 회고 (3)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코틀린 코루틴
    백준 어린 왕자
    다이렉트 버퍼
    백준1188
    자바 최소공배수
    자바 물리 메모리
    소가 길을 건너간 이유 5
    네이티브 메모리
    백준 경쟁적 전염
    선발 명단
    백준 1114
    백준 1034
    자바 스레드 상태
    백준 파티
    컴공 취준
    백준14465
    백준1238
    백준6980
    커널 스레드 상태
    graceful shutdown
    ai개발자
    백준1747
    파이썬
    백준 1004
    백준15954
    2020 카카오 인턴
    경력 서류
    terminationGracePeriodSeconds
    백준 17281
    백준 30
    통나무 자르기
    백준 1114 파이썬
    백준 1027
    우아한 종료
    백준 인형들
    백준 고층 건물
    백준 램프
    백준 18405
    preStop
    direct buffer
    합승 택시 요금
    백준 10610
    백준 5347
    소수&팰린드롬
    네카라쿠배 취업
    백준2262
    1114백준
    자바 프로세스 종료
    자바 최대공약수
    카카오 필요스펙
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
WildDevmon
[백준 17218] ⚾
상단으로

티스토리툴바