본문 바로가기

학습 노트/알고리즘 (Python)

99클럽 - 역습

 

3976번: 역습

축구에서 역습은 매우 중요한 전술이다. WeissBlume FC는 수비 할 때, 스트라이커 두명을 제외하고는 모두 자기 진영에서 수비를 한다. 이때, 수비수가 상대방의 공을 따게 되면, 스트라이커에게 긴

www.acmicpc.net

아이디어

입력이 매우 복잡하다.

  • c : 테스트 케이스의 수
  • n, l1, l2, s1, s2
    • n : 공격수 좌표의 갯수
    • l1, l2 : 패스 난이도
    • s1, s2 : 슛 난이도
  • 1번 선수가 패스하는 데 걸리는 시간
  • 1번 선수가 드리블 하는 데 걸리는 시간
  • 2번 선수가 패스하는 데 걸리는 시간
  • 2번 선수가 드리블 하는 데 걸리는 시간

입력을 받고 나서는 선수1과 2가 해당 지점에 도착하는 최소 시간을 도출하고 이 중 작은 값을 최종 결과로 사용한다.

풀이

c = int(input())

results = []

while c > 0:
    c -= 1
    n, l1, l2, s1, s2 = map(int, input().split())
    
    dp = [[0] * n for _ in range(3)]
    dp[1][0] = l1
    dp[2][0] = l2
    
    p1ps = list(map(int, input().split()))
    p1dr = list(map(int, input().split()))
    p2ps = list(map(int, input().split()))
    p2dr = list(map(int, input().split()))

    for i in range(1, n):
        dp[1][i] = min(dp[2][i - 1] + p2ps[i - 1], dp[1][i - 1] + p1dr[i - 1])
        dp[2][i] = min(dp[1][i - 1] + p1ps[i - 1], dp[2][i - 1] + p2dr[i - 1])

    ans = min(dp[1][n - 1] + s1, dp[2][n - 1] + s2)
    results.append(ans)

for result in results:
    print(result)