12886번 돌 그룹

동도리동·2021년 8월 13일
0

코딩테스트

목록 보기
14/76

변하는 것과 변하지 않는 것을 잘 구별해야겠다.
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;
}
	
	
profile
긍정코딩세상

0개의 댓글

관련 채용 정보