Blind Cubing - 1. m2op 해법의 원리 이해

Blind Cubing - 1. m2op 해법의 원리 이해

먼저 큐브는 잠시 내려놓고, m2op 해법의 원리를 간단한 예시를 통해 이해해보도록 하자.

큐브를 맞추는 것을 알파벳 문자열을 정렬하는것으로 대응하여 살펴보겠다.

C D E A B

우리는 이 문자열의 각 열들을 교환하여 A B C D E 로 정렬하는 것이 목표이다.
A B C D E를 큐브가 다 맞춰진 상태와 대응된다고 생각하면 된다.

m2op 해법에서는 큐브의 특정 위치를 "버퍼(buffer) 위치" 라고 부르며 활용하게 되는데, 이 예시에서는 1열을 "버퍼위치"로 활용하고 [ ] 로 표시하도록 하겠다.
(첫번째 문자부터 1열, 2열 ... 5열 이라 하자)

[ C ] D E A B

m2op 해법은 버퍼에 있는 문자를 자신의 목적지로 보내는것을 반복하여 문자열을 A B C D E 로 만드는 것이 목표이다.

현재 버퍼에는 C가 있다.
C의 목적지는 3열이므로, 버퍼와 3열을 교환해보자.
버퍼와 교환할 문자의 열은 { }로 표시하도록 하겠다.

[C] D {E} A B

[E] D {C} A B.

버퍼와 3열을 교환한 뒤, 버퍼에는 E가 들어왔다.
E는 5열로 보내줘야 하므로, 버퍼와 5열을 교환하자.

[E] D C A {B}

[B] D C A {E}

이제는 버퍼에 B가 있다.
B는 2열로 보내줘야 하므로

[B] {D} C A E

[D] {B} C A E

마지막으로 버퍼에 있는 D를 4열로 보내주면 된다.

[D] B C {A} E

[A] B C {D} E

버퍼와의 교환을 통해 문자열을 정렬하는 데 성공했다.

그렇다면 왜 교환을 반복하는 방식을 사용하는 것일까?
교환을 반복하는 방식을 사용하면 암기가 용이하기 때문이다.
n개의 문자를 정렬해야 하는 상황이라면, (n-1)개의 문자만 암기해 주면 된다.
3x3x3 큐브의 경우 예외가 없을 시 16개의 문자를 암기하게 된다.

위 시행을 예시로 들면, 버퍼에 있었던 문자 순서대로 (C E B D) 였다.

시행 과정에서 우리는 버퍼에 있는 문자를 자신의 목적지로 보내주는 것을 반복했다.
즉, "버퍼에 있는 문자의 목적지"와 "버퍼"의 교환을 반복한 것이다.

즉, 시행을 시작하기 전 (C E B D)라는 네개의 문자를 암기한 후, 눈을 가린 뒤

"버퍼와 C의 목적지의 교환"
"버퍼와 E의 목적지의 교환"
"버퍼와 B의 목적지의 교환"
"버퍼와 D의 목적지의 교환"
을 반복해 주면 된다.

여기서 두 가지 의문점이 들 수 있을 것이다.

첫번째는 시행을 시작하기 전 C D E A B 라는 문자열을 통해
버퍼에 들어올 문자들인 (C E B D)를 어떻게 추론할 수 있는지다.

방법은 간단하다.
C D E A B 에서 버퍼의 C는 가장 먼저 C의 목적지로 보내질 것이다.
즉, C와 C의 목적지인 3열에 들어와 있는 E가 교환될 것이다.
다음엔 E가 버퍼로 오는 것이다.
E는 E의 목적지 위치인 5열에 있는 B와 교환될 예정이므로 다음엔 B가 버퍼에 들어오게 될 것이다.
B는 B의 목적지에 있는 D와 교환될 예정이므로 D가 버퍼에 들어오게 될 것이다.
마지막으로 D를 D의 목적지 에 있는 A와 교환하게 되면, 버퍼에 A가 들어오게 되는데, A의 목적지는 버퍼 그 자체이므로 모든 문자의 정렬이 끝나게 된다.

즉 버퍼에 있는 문자를 시작으로, 앞에 외운 문자의 목적지에 있는 문자들을 순서대로 외워주면 된다.

두번째 의문점은, 버퍼와 각 조각의 교환을 어떻게 시행할지이다.
버퍼와 조각을 교환하는 과정에서 추가적인 암기가 생긴다면, 이 방식이 큰 효율을 발휘하지 못하기 때문이다.

실제 큐브에서 버퍼와 각 조각의 교환의 구체적인 방식은, 다음 글에서 설명하도록 하겠다.