아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

전구 모두 켜기

면접 대비

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

요약
원점에서 선택한 칸까지 직사각형을 뒤집는 스위치로 모든 전구를 켜는 최소 횟수를 구합니다.
난이도

보통10점 중 5점

유형
그리디, 누적 합
정답자
아직 제출이 없습니다

문제

직사각형 패널은 RR개의 행으로 이루어져 있고, 각 행에는 전구가 CC개씩 달려 있다. 행 번호는 0부터 R−1R-1까지, 열 번호는 0부터 C−1C-1까지다. 전구 가운데 일부는 켜져 있고 나머지는 꺼져 있다.

패널에는 스위치판이 연결되어 있다. 스위치는 RR행 CC열의 직사각형으로 놓여 있어서 패널과 크기가 같다.

스위치 하나를 누르면 전구 일부의 상태가 뒤집힌다. 켜져 있던 전구는 꺼지고, 꺼져 있던 전구는 켜진다. 좀 더 정확히 말하면 좌표가 (row,col)(\text{row}, \text{col})인 스위치를 누를 때 x≤rowx \le \text{row}이고 y≤coly \le \text{col}인 모든 좌표 (x,y)(x, y)의 전구가 상태를 바꾼다. 즉 (0,0)(0, 0)과 (row,col)(\text{row}, \text{col})을 마주 보는 두 꼭짓점으로 삼는 직사각형 안의 전구가 모두 뒤집힌다.

전구의 초기 상태를 담은 행렬이 주어진다. 문자 1은 켜진 전구, 문자 0은 꺼진 전구를 뜻한다.

모든 전구를 한꺼번에 켜 놓으려면 스위치를 최소 몇 번 눌러야 하는지 구하라.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다.

각 테스트 케이스의 첫 줄에는 정수 RR과 CC가 주어진다. 이어지는 RR개의 줄에는 각각 문자가 CC개 주어지고, 이 R×CR \times C 행렬이 전구의 초기 상태다. RR과 CC는 1 이상 500 이하다.

출력

각 테스트 케이스마다 Case #x: M 형식으로 한 줄씩 출력한다. xx는 테스트 케이스 번호이고 1부터 시작한다. MM은 모든 전구를 한꺼번에 켜기 위해 필요한 최소 누름 횟수다.

예제1

  1. 예제 1

    입력
    6
    3 7
    0001111
    0001111
    1111111
    3 7
    0000000
    0000000
    0000000
    3 7
    1111111
    1111111
    1111111
    1 5
    01001
    1 10
    1010101010
    4 4
    0101
    1010
    0101
    1010
    
    예상 출력
    Case #1: 1
    Case #2: 1
    Case #3: 0
    Case #4: 3
    Case #5: 10
    Case #6: 7