이번 문제는 BFS를 이용하여 해결하였다. 세 그룹의 총 합을 미리 구한 후에, 큐에는 두 그룹만 넣고, 이 두 그룹과 총 합을 통해 나머지 하나의 그룹까지 이용할 수 있도록 한다. 세 그룹들을 모든 방법으로 비교하며 주어진 연산을 적용시킨다. 그리고 세 그룹들의 값을 min, max를 통해 순서가 다른 경우를 모두 없애주고, 방문처리를 하며 탐색해나간다. 만약 세 그룹의 크기가 같아지면 1을 반환하고, while문이 끝나도 세 그룹이 다르다면 0을 반환하도록 하였다. 그리고 총 합이 3으로 나눠떨어지지 않으면, 답이 0이 되도록하고, 나눠 떨어지면 bfs함수를 실행하여 탐색하도록 하였다.
from collections import deque
a, b, c=map(int, input().split())
s=a+b+c
visited=[[False for _ in range(s)] for _ in range(s)]
def bfs():
q=deque()
q.append((a, b))
visited[a][b]=True
while q:
i, j=q.popleft()
k=s-j-i
if i==j==k:
return 1
for x, y in (i, j), (j, k), (k, i):
if x<y:
x+=x
y-=x
elif x>y:
x-=y
y+=y
else:
continue
z=s-x-y
nx=min(x, y, z)
ny=max(x, y, z)
if 0<=nx and 0<=ny and 0<=s-nx-ny:
if not visited[nx][ny]:
q.append((nx, ny))
visited[nx][ny]=True
return 0
answer=0
if not s%3:
answer=bfs()
print(answer)