변하는 것과 변하지 않는 것을 잘 구별해야겠다.
1. 총 돌의 개수는 변하지 않는다. 이를 이용하여 (A,B,C) => (sum/3, sum/3, sum/3)의 점으로 이동하는 문제로 바라볼 수 있다.
2. 또 하나더, a배열을 선언하고, DFS에 넣을때 a배열이 아닌 b배열을 새로 넣어주는 것을 알 수 있는데 이는 원본을 훼손하지 않기 위함이다. 앞에서도 이렇게 해줘야 하는 것들이 있었다. for문안에 DFS를 넣을때 주의해야겠다.
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
int ch[1501][1501];
int sum = 0;
void DFS(int x, int y) {
if (ch[x][y] == 1) return;
else {
ch[x][y] = 1;
int a[3] = { x, y, sum - x - y };
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (a[i] < a[j]) {
int b[3] = { x,y,sum - x - y };
b[i] += a[i];
b[j] -= a[i];
DFS(b[0], b[1]);
}
}
}
}
}
int main() {
int A, B, C;
cin >> A >> B >> C;
sum = A + B + C;
if (sum % 3 != 0) {
cout << "0" << '\n';
return 0;
}
DFS(A, B);
if (ch[sum/3][sum/3]) {
cout << "1" << '\n';
}
else {
cout << "0" << '\n';
}
return 0;
}