지금까지의 승패 전파 알고리즘을 통해 우리는 최대 길이가 1인 사이클(루프)까지 고려하여 음절의 승패를 분류할 수 있었습니다. 하지만 여기서 한 걸음 더 나아가, 최대 길이가 "2"인 사이클을 분석하면 게임의 승패를 훨씬 더 깊이 이해할 수 있습니다.
기존의 승패 전파와 가지치기를 모두 수행한 그래프를 상상해 봅시다. '톱'이라는 음절은 '톱날', '톱자루' 같은 수많은 단어가 이미 가지치기되어, 유일하게 '톱날지붕'이라는 단어 하나만 남아있습니다.
이때 플레이어가 '톱날지붕'을 말하면, 상대방은 '붕'을 받게 됩니다. 그런데 만약 상대방이 '붕어톱'이라는 단어로 즉시 받아칠 수 있다면 어떻게 될까요? 게임은 톱 → 붕 → 톱의 흐름으로 되돌아오고, 결국 '톱'에서 시작한 플레이어는 불리한 상황에 놓입니다.
이처럼 →, →로 즉시 주고받을 수 있는 단어의 쌍을 '돌림 단어 쌍'이라고 부릅니다.
이 돌림 단어 쌍은 매우 강력하고 놀라운 성질을 가집니다. 바로 "그래프 내의 모든 돌림 단어 쌍을 제거해도, 다른 모든 음절의 승패 여부는 전혀 바뀌지 않는다"는 것입니다.
이전의 루프 분석은 알고리즘 수행 '도중에' 적용되는 규칙이었지만, 이 성질은 승패 전파와 관계없이 게임 시작 '전에' 적용하여 그래프 자체를 단순화할 수 있는 매우 강력한 법칙입니다. 이를 수식으로 표현하면 다음과 같습니다.
그래프 에 돌림 단어 쌍 와 가 존재할 때, 어떤 정점 에 대해서도 다음이 성립합니다.
isWin = isWin
(isWin는 포지션 가 필승이면 true를 반환하는 함수)
이 원리의 핵심은, 돌림 단어 쌍이 '어느 한쪽에게만 유리한 필살기'가 될 수 없기 때문입니다. 어떤 플레이어가 돌림 단어의 한쪽을 사용하면, 상대방은 즉시 반대쪽 단어로 응수하여 그 효과를 완벽하게 상쇄할 수 있습니다.
더 엄밀하게 증명해 봅시다. 'A'와 'B' 두 플레이어가 있고, 돌림 단어 쌍이 제거된 작은 그래프를 , 원래 그래프를 라고 하겠습니다. 우리는 "가 에서 필패라면, 에서도 필패이다" 라는 사실을 보일 것입니다.
가정: A가 시작하는 포지션 (, )는 필패입니다. 즉, B는 위에서 진행되는 게임의 필승 전략()을 알고 있습니다.
상황: 이제 A와 B가 더 큰 그래프 에서 게임을 시작합니다. B는 자신의 필승 전략 를 이용해 A를 이길 수 있습니다. B의 전략은 간단합니다.
결과: A가 특별한 수 를 사용했을 때 어떤 일이 벌어질까요?
결국 A가 한 행동은, 자신의 턴을 소모하여 게임판 위에서 돌림 단어 쌍을 지워버린 것과 같습니다.
A는 이제 포지션 (, )에서 다음 수를 두어야 합니다. 하지만 B는 원래부터 위의 모든 상황에 대한 필승 전략 를 가지고 있었습니다. A가 어떤 수를 두든, B는 에 따라 대응하여 승리할 수 있습니다.
따라서 A는 에서 어떤 수를 선택하든 B를 이길 수 없습니다. 가 에서 필패라면, 에서도 필패인 것이죠. 이는 두 게임의 승패 여부가 완벽히 동일함을 의미합니다.
이 강력한 원리 덕분에, 우리는 어떤 포지션 (, )를 분석할 때 다음의 과정을 거칠 수 있습니다.
이 과정을 통해 우리는 '최대 길이가 2인 사이클을 수반하는 필승/필패 정점'을 빠른 시간 내에 모두 찾아낼 수 있습니다. 이것이 저희 끝말잇기 엔진이 도달한, 신속하게 분류 가능한 음절의 최대 범위입니다.
이렇게 모든 분석을 마친 후에도 여전히 승패가 결정되지 않고 남는 음절들을 '루트 음절'이라고 부르며, 이 음절들로 이루어진 단어를 '루트 단어'라고 합니다. 현대의 수많은 끝말잇기 고수들의 대결은 바로 이 루트 음절을 서로 주고받으며, 더 복잡한 수읽기를 통해 승패를 겨루는 영역에서 펼쳐집니다.