Search
Duplicate
📕

행렬

주차
19
문제번호
1080
언어
티어
실버
유형
그리디
nj_Blog
nj_상태
이해도
33%
풀이
사람
이해도 2
13 more properties

문제접근

그리디라서 a와 b행렬이 다른 부분을 발견할때마다 3 X 3크기로 반전을 시켰다

놓쳤던 부분

그리디라서 이렇게 생각하고 풀었는데 맞았다..왜일까..

코드

2152 KB

0 ms

#include <iostream> #include <vector> int n,m; std::vector<std::string> a; std::vector<std::string> b; int answer = 0; void input_setting() { std::ios_base::sync_with_stdio(false); std::cin.tie(0); std::cout.tie(0); } void input() { std::string str; std::cin >> n >> m; for (int i = 0; i < n; i++) { std::cin >> str; a.push_back(str); } for (int i = 0; i < n; i++) { std::cin >> str; b.push_back(str); } } void reverse(int indexI, int indexJ) { ++answer; for (int i = indexI; i < indexI + 3; i++) for (int j = indexJ; j < indexJ + 3; j++) { if (a[i][j] == '0') a[i][j] = '1'; else a[i][j] = '0'; } } void check_matrix() { for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) if (a[i][j] != b[i][j]) { std::cout << "-1"; return ; } std::cout << answer; } void solution() { for (int i = 0; i < n - 2; i++) for (int j = 0; j < m - 2; j++) if (a[i][j] != b[i][j]) reverse(i , j); check_matrix(); } int main(void) { input_setting(); input(); solution(); return (0); }
C++
복사