Skip to content

Commit e99d311

Browse files
ing-eokingbugs-bot
authored andcommitted
๐Ÿœ Study: 2์ฐจ์› ๋™์ „ ๋’ค์ง‘๊ธฐ
1 parent 6ba1724 commit e99d311

1 file changed

Lines changed: 50 additions & 0 deletions

File tree

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#include <iostream>
2+
#include <vector>
3+
#include <string>
4+
5+
using namespace std;
6+
7+
int N, M;
8+
9+
void reverse(vector<vector<int>> &m, int r, int c, int dr, int dc) {
10+
while (r < N && c < M) {
11+
m[r][c] = !m[r][c];
12+
r += dr; c += dc;
13+
}
14+
}
15+
16+
bool equal(vector<vector<int>> &a, vector<vector<int>> &b) {
17+
for (int i = 0; i < N; i++)
18+
for (int j = 0; j < M; j++)
19+
if (a[i][j] != b[i][j]) return false;
20+
return true;
21+
}
22+
23+
void search(vector<vector<int>> m, vector<vector<int>> &target, int &answer, bool dr, bool dc, bool eq) {
24+
int n = 0, r = 0, c = 0;
25+
do if (( eq && (m[r][c] != target[r][c])) ||
26+
(!eq && (m[r][c] == target[r][c]))) {
27+
n++;
28+
reverse(m, r, c, !dr, !dc);
29+
} while ((r += dr) < N && (c += dc) < M);
30+
31+
r = 0, c = 0;
32+
do if (m[r][c] != target[r][c]) {
33+
n++;
34+
reverse(m, r, c, dr, dc);
35+
} while ((r += !dr) < N && (c += !dc) < M);
36+
37+
if (equal(m, target) && (answer < 0 || answer > n)) {
38+
answer = n;
39+
}
40+
}
41+
42+
int solution(vector<vector<int>> beginning, vector<vector<int>> target) {
43+
int answer = -1, n = 0;
44+
N = beginning.size(); M = beginning[0].size();
45+
search(beginning, target, answer, 0, 1, true);
46+
search(beginning, target, answer, 1, 0, true);
47+
search(beginning, target, answer, 0, 1, false);
48+
search(beginning, target, answer, 1, 0, false);
49+
return answer;
50+
}

0 commit comments

Comments
ย (0)