만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

대각선 뒤집기

면접 대비

시간 제한1초메모리 제한2048 MB

요약
0과 1로 이루어진 격자가 주어질 때, 모든 칸을 0으로 만드는 대각선 뒤집기 연산의 최소 횟수를 구합니다. 불가능하면 -1을 출력합니다.
난이도

보통10점 중 6점

유형
유니온 파인드, 그래프, 구현
정답자
아직 제출이 없습니다

문제

m×nm \times n 크기의 격자가 주어진다. 격자의 원소는 00 또는 11이다. 대각선 연산은 두 종류가 있다.

격자의 위치 (i,j)(i,j)에 대한 종류 AA 연산은 임의의 정수 kk에 대해 위치 (i+k,j−k)(i + k, j - k)에 있는 원소를 모두 뒤집는다. 00은 11이 되고, 11은 00이 된다.

격자의 위치 (i,j)(i,j)에 대한 종류 BB 연산은 임의의 정수 kk에 대해 위치 (i+k,j+k)(i + k, j + k)에 있는 원소를 모두 뒤집는다. 위치 (p,q)(p, q)는 0≤p≤m−10 \le p \le m - 1이고 0≤q≤n−10 \le q \le n - 1일 때만 유효하다.

그림 1. 위치 (2,0)(2, 0)에 대한 종류 AA 대각선 연산

그림 2. 위치 (2,1)(2, 1)에 대한 종류 BB 대각선 연산

그림 1은 위치 (2,0)(2, 0)에 대한 종류 AA 연산을 보여준다. 위치 (1,1)(1, 1) 또는 (0,2)(0, 2)에 대한 종류 AA 연산도 같은 효과를 낸다. 그림 2는 위치 (2,1)(2, 1)에 대한 종류 BB 연산을 보여준다. 위치 (1,0)(1, 0) 또는 (3,2)(3, 2)에 대한 종류 BB 연산도 같은 효과를 낸다.

m×nm \times n 격자가 주어졌을 때, 격자의 모든 원소를 00으로 만드는 데 필요한 대각선 연산의 최소 횟수를 구하라.

입력

첫 줄에 격자의 행 수 mm (1≤m≤1 0001 \le m \le 1\,000)과 열 수 nn (1≤n≤1 0001 \le n \le 1\,000)을 나타내는 양의 정수 두 개가 주어진다. 행은 00부터 m−1m - 1까지, 열은 00부터 n−1n - 1까지 번호가 매겨진다.

이어지는 mm개의 줄에는 각각 공백으로 구분된 nn개의 수가 주어지며, 수는 00 또는 11이다. ii번째 줄은 격자의 행 i−1i - 1에 해당한다.

출력

격자의 모든 원소를 00으로 만드는 최소 대각선 연산 횟수를 한 줄에 출력한다. 불가능하면 −1-1을 출력한다.

예제4

  1. 예제 1

    입력
    4 3
    1 0 1
    0 0 1
    1 1 1
    0 0 0
    
    예상 출력
    4
    
  2. 예제 2

    입력
    2 2
    1 1
    1 1
    
    예상 출력
    2
    
  3. 예제 3

    입력
    3 3
    1 0 1
    0 1 0
    1 0 1
    
    예상 출력
    3
    
  4. 예제 4

    입력
    3 3
    0 0 1
    0 0 1
    1 0 1
    
    예상 출력
    -1