백준 1080 행렬 / C++

이유참치·2025년 7월 31일

백준

목록 보기
8/249

문제 : 1080

풀이 point

3*3 크기의 행렬로 경우의 수를 보면 된다.

코드

//백준 1080, 행렬
#include <iostream>

int gridA[51][51];
int gridB[51][51];

int main(){

    int N, M;

    std::cin >> N >> M;

    std::string s;
    for(int i{0}; i<N; ++i){
        std::cin >> s;
        for(int j{0}; j<M; ++j){
            gridA[i][j] = s[j]-'0';
        }
    }

    for(int i{0}; i<N; ++i){
        std::cin >> s;
        for(int j{0}; j<M; ++j){
            gridB[i][j] = s[j]-'0';
        }
    }

    int cnt{0};
    for(int i{0}; i<N-2; ++i){
        for(int j{0}; j<M-2; ++j){
            if(gridA[i][j] != gridB[i][j]){
                for(int k{i}; k<=i+2; ++k){
                    for(int l{j}; l<=j+2; ++l){
                        gridA[k][l] ^= 1;
                    }
                }
                ++cnt;
            }
        }
    }

    for(int i{0}; i<N; ++i){
        for(int j{0}; j<M; ++j){
            if(gridA[i][j] != gridB[i][j]){
                std::cout << -1;
                return 0;
            }
        }
    }

    std::cout << cnt;

    return 0;
}

2025-07-24T05:58:46.968Z

profile
임아리 - 대학생

0개의 댓글