BOJ 20524 Управление видеонаблюдением
BOJ 20524 Управление видеонаблюдением
문제 내용
1과 2로 이루어진 행 열의 2차원 배열이 주어집니다. 크기의 부분 배열의 네 값이 모두 같으면 이를 편리한 부분 배열이라고 합니다.
주어진 배열을 오른쪽 또는 아래로 시프트하는 연산을 원하는 만큼 수행할 수 있습니다. 오른쪽으로 시프트하면 각 원소는 한 칸 오른쪽으로 이동하며, 맨 오른쪽 열에 있던 원소는 같은 행의 맨 왼쪽 열로 이동합니다. 마찬가지로, 아래로 시프트하면 각 원소는 한 칸 아래로 움직이며, 맨 아래 행에 있던 원소는 같은 열의 맨 위 행으로 이동합니다.
이때 시프트를 적절히 수행하여 얻을 수 있는 편리한 부분 배열의 최대 개수를 구하세요.
입력
첫 줄에 과 이 주어집니다.
그 다음에 2차원 배열이 공백 없이 주어집니다.
문제 풀이
스포일러
맨 오른쪽과 맨 왼쪽, 맨 아래와 맨 위가 연결되었다고 생각하면, 사실상 개의 서로 다른 부분 배열이 있다고 볼 수 있습니다.
시프트를 하여 얻을 수 있는 부분 배열의 목록은 이러한 개의 부분 배열 중에서 하나의 행과 하나의 열을 제외한 것과 같습니다.
따라서, 개의 부분 배열 중 편리한 부분 배열이 어느 것인지 확인하고, 각 행과 각 열, 그리고 전체에서 그러한 부분 배열의 개수를 센 다음, 행과 열을 제외했을 때의 개수의 최댓값을 구하면 됩니다.
행과 열을 제외한 편리한 부분 배열의 개수는 전체 개수 - i행의 개수 - j열의 개수 + i행 j열의 편리한 부분 배열 여부와 같습니다.
Last updated on