그리드 게임
grid
인 0-인덱스 2D 배열2 x n
이 주어집니다. 여기서 grid[r][c]
는 행렬의 위치(r, c)
에 있는 점의 수를 나타냅니다. 두 로봇이 이 매트릭스에서 게임을 하고 있습니다.두 로봇 모두 처음에
(0, 0)
에서 시작하여 (1, n-1)
에 도달하려고 합니다. 각 로봇은 오른쪽((r, c)
에서 (r, c + 1)
으로) 또는 아래로((r, c)
에서 (r + 1, c)
로)만 이동할 수 있습니다.게임이 시작될 때 첫 번째 로봇은
(0, 0)
에서 (1, n-1)
로 이동하여 경로에 있는 셀에서 모든 포인트를 수집합니다. 경로를 통과하는 모든 셀(r, c)
에 대해 grid[r][c]
는 0
로 설정됩니다. 그런 다음 두 번째 로봇은 (0, 0)
에서 (1, n-1)
로 이동하여 경로에서 포인트를 수집합니다. 경로가 서로 교차할 수 있습니다.첫 번째 로봇은 두 번째 로봇이 수집하는 포인트 수를 최소화하려고 합니다. 반대로 두 번째 로봇은 수집하는 포인트 수를 최대화하려고 합니다. 두 로봇 모두 최적의 상태로 플레이하면 두 번째 로봇이 수집한 점수를 반환합니다.
예 1:
입력: 그리드 = [[2,5,4],[1,5,1]]
출력: 4
설명: 첫 번째 로봇이 선택한 최적 경로는 빨간색으로 표시되고 두 번째 로봇이 선택한 최적 경로는 파란색으로 표시됩니다.
첫 번째 로봇이 방문한 셀은 0으로 설정됩니다.
두 번째 로봇은 0 + 0 + 4 + 0 = 4점을 수집합니다.
예 2:
입력: 그리드 = [[3,3,1],[8,5,2]]
출력: 4
설명: 첫 번째 로봇이 선택한 최적 경로는 빨간색으로 표시되고 두 번째 로봇이 선택한 최적 경로는 파란색으로 표시됩니다.
첫 번째 로봇이 방문한 셀은 0으로 설정됩니다.
두 번째 로봇은 0 + 3 + 1 + 0 = 4점을 수집합니다.
예 3:
입력: 그리드 = [[1,3,1,15],[1,3,3,1]]
출력: 7
설명: 첫 번째 로봇이 선택한 최적 경로는 빨간색으로 표시되고 두 번째 로봇이 선택한 최적 경로는 파란색으로 표시됩니다.
첫 번째 로봇이 방문한 셀은 0으로 설정됩니다.
두 번째 로봇은 0 + 1 + 3 + 3 + 0 = 7점을 수집합니다.
제약:
grid.length == 2
n == grid[r].length
1 <= n <= 5 * 104
1 <= grid[r][c] <= 105
해결책:
class Solution:
def gridGame(self, grid: List[List[int]]) -> int:
n = len(grid[0])
top = [0]
bottom = [0]
for el in grid[0]:
top.append(top[-1] + el)
for el in grid[1]:
bottom.append(bottom[-1] + el)
opponent = float('inf')
mindex = None
for i in range(n):
curropp = max(top[-1] - top[i + 1], bottom[i])
if curropp <= opponent:
opponent = curropp
mindex = i
return max(top[-1] - top[mindex + 1], bottom[mindex])
Reference
이 문제에 관하여(그리드 게임), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/theabbie/grid-game-1nh2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)