BOJ 20524 Управление видеонаблюдением

BOJ 20524 Управление видеонаблюдением

문제 링크:

문제 내용

1과 2로 이루어진 nnmm열의 2차원 배열이 주어집니다. 2×22 \times 2 크기의 부분 배열의 네 값이 모두 같으면 이를 편리한 부분 배열이라고 합니다.

주어진 배열을 오른쪽 또는 아래로 시프트하는 연산을 원하는 만큼 수행할 수 있습니다. 오른쪽으로 시프트하면 각 원소는 한 칸 오른쪽으로 이동하며, 맨 오른쪽 열에 있던 원소는 같은 행의 맨 왼쪽 열로 이동합니다. 마찬가지로, 아래로 시프트하면 각 원소는 한 칸 아래로 움직이며, 맨 아래 행에 있던 원소는 같은 열의 맨 위 행으로 이동합니다.

이때 시프트를 적절히 수행하여 얻을 수 있는 편리한 부분 배열의 최대 개수를 구하세요.

입력

첫 줄에 nnmm이 주어집니다.

그 다음에 2차원 배열이 공백 없이 주어집니다.

문제 풀이

스포일러

맨 오른쪽과 맨 왼쪽, 맨 아래와 맨 위가 연결되었다고 생각하면, 사실상 n×mn \times m개의 서로 다른 2×22 \times 2 부분 배열이 있다고 볼 수 있습니다.

시프트를 하여 얻을 수 있는 부분 배열의 목록은 이러한 n×mn \times m개의 부분 배열 중에서 하나의 행과 하나의 열을 제외한 것과 같습니다.

따라서, n×mn \times m개의 부분 배열 중 편리한 부분 배열이 어느 것인지 확인하고, 각 행과 각 열, 그리고 전체에서 그러한 부분 배열의 개수를 센 다음, ii행과 jj열을 제외했을 때의 개수의 최댓값을 구하면 됩니다.

ii행과 jj열을 제외한 편리한 부분 배열의 개수는 전체 개수 - i행의 개수 - j열의 개수 + i행 j열의 편리한 부분 배열 여부와 같습니다.

Last updated on