2x2 큐브 맞추는법 - 2x2 kyubeu majchuneunbeob

티스토리 뷰

222큐브 공식입니다. 총 3단계로 구분해 동영상을 찍었는데요. 1단계는 밑면과 옆면 아랫줄을 맞추는 단계입니다. 2단계는 윗면을 맞추고요. 3단계는 옆면 윗줄을 맞춰 222큐브를 완성합니다.

333큐브에 비해 적은 단계로 큐브를 완성하는데요. 진행 단계가 짧다보니 1, 2단계만에 큐브가 완성되기도 합니다. 다시 섞어서 연습을 더 해보세요.

222큐브 맞추는 공식은 동영상의 설명과 글을 참고하세요. 스마트폰으로 볼때 영상이 보이지 않는다는 분들도 있더군요. 유튜브 주소도 링크시켜 놓았으니 참고하세요.

1단계 //youtu.be/sa36ob-l1t8

2단계 //youtu.be/EfDe-EDhdQo

윗면 노란색의 모양에 따라 기준을 잡는 위치가 다릅니다. 그림에서 굵은 선은 옆면 노란색의 위치입니다. 아래 기준처럼 큐브를 놓고 공식을 사용합니다.

① 윗면에 노란색이 없는 경우 1

② 윗면에 노란색이 없는 경우 2

① 오른쪽 줄을 아래로 내린다

② 앞면을 왼쪽으로 돌린다

③ 왼쪽 줄을 위로 올린다 

④ 앞면을 오른쪽으로 돌린다

⑤ 오른쪽 줄을 위로 올린다

⑥ 앞면을 왼쪽으로 돌린다

⑦ 왼쪽 줄을 아래로 내린다 

⑧ 앞면을 오른쪽으로 돌린다

3단계 //youtu.be/uJTmAfZnewE

※ 처음 설명에서 공식을 적용하던 중 마지막 ⑬째 공식을 반대로 돌렸습니다. 말은 왼쪽으로 돌리라고 하고 손은 오른쪽으로 돌렸는데요. 참고하세요.

① 오른쪽 줄을 아래로 내린다

② 윗줄을 오른쪽으로 돌린다

③ 앞면을 왼쪽으로 돌린다

④ 왼쪽 줄을 위로 올린다

⑤ 앞면을 오른쪽으로 돌린다

⑥ 오른쪽 줄을 위로 올린다

⑦ 앞면을 왼쪽으로 돌린다

⑧ 왼쪽 줄을 아래로 내린다

⑨ 앞면을 오른쪽으로 돌린다

⑩ 오른쪽 줄을 아래로 내린다

⑪ 윗줄을 왼쪽으로 돌린다

⑫ 오른쪽 줄을 위로 올린다

⑬ 윗줄을 왼쪽으로 돌린다

222큐브 맞추는법을 알아봤는데요. 처음에는 어려울 수 있습니다. 처음이니까 당연한 것인데요. 계속 연습하면 잘 맞출 수 있을 겁니다. 화이팅!!

목차

1. 큐브가 없으니 큐브를 먼저 만들자

  1.1 Unity로 1x1 큐브 만들기

    1.1.1 Cube에 Color 입히기

  1.2 Rotation 구현

  1.3 2x2 큐브로 확장

  1.4 Skill 구현

    1.4.1 Random Shuffle 구현

    1.4.2 Twist 두가지 구현

  1.5 2x2 큐브 자동으로 맞추기 구현

    1.5.1 각 Face의 Color 받아오기

1.5.2 한 면 맞추기

    1.5.3 나머지 면 맞추기

  1.5 3x3 큐브로 확장

2. 큐브가 있으니 강화학습으로 맞춰보자

-------------------------------------------------------------------

1.5 2x2 큐브 자동으로 맞추기

  1.5.3 나머지 면 맞추기

이번 포스팅에서는 2x2x2 Cube를 저번 포스팅에 이어 나머지 윗면을 맞춰보도록 하겠습니다. 이번 포스팅도 내용이 조금 복잡하고 설명이 섬세하지 못할 수 있습니다. 궁금한 점은 언제든지 댓글 달아주시면 친절하게 도와드리겠습니다!

들어가기에 앞서 이전 포스팅에서 우리는 2x2x2 Cube의 아랫면을 맞춰보았습니다.

큐브 맞추는 기계 살 돈이 없어서 직접 만드는 글 #8

목차 1. 큐브가 없으니 큐브를 먼저 만들자   1.1 Unity로 1x1 큐브 만들기   1.1.1 Cube에 Color 입히기   1.2 Rotation 구현   1.3 2x2 큐브로 확장   1.4 Skill 구현 1.4.1 Random Shuffle 구현 1...

mathmakeworld.tistory.com

SolveBottomFace.mp4

5.69MB

앞으로 우리가 맞추는 과정도 아래 영상을 바탕으로 진행하도록 하겠습니다.

1.5.3.1 1번 Cube 맞추기

윗면을 맞추기 전 우리는 먼저 저번 포스팅에서 했던 작은 약속으로 정한 Cube번호에 따라 1번 Cube를 먼저 맞춰주어야 합니다. 

함께 정했던 또 하나의 작은 약속

1번 Cube자리에 2번 Cube와 Color가 맞는 Cube를 넣어주어야 하기 때문에 저번 포스팅에서 미리 짜두었떤 Color 찾는 Code를 활용하여

 - 1번 2번 Cube가 Color가 맞다면 그대로 두고 

 - 0번 3번 Cube가 Color가 맞다면 전체를 Left로 돌려 0번 Cube가 1번으로 오게 합니다.

 - 5번 6번 Cube가 Color가 맞다면 전체를 Right로 두 번 돌려 5번 Cube가 1번으로 오게 합니다.

 - 4번 7번 Cube가 Color가 맞다면 전체를 Right로 한 번 돌려 4번 Cube가 1번으로 오게 합니다.

 - 위 4가지 Case에 해당되지 않으면 윗줄을 시계방향으로 돌립니다.

아래 그림은 그 내용을 Code로 작성한 부분이고 나머지 부분은 Git에서 보시면 될 것 같습니다. CheckColorCount라는 함수는 computeList의 Color들과 targetList의 Color가 몇개나 동일한지 Check해서 2개면 true를 return하는 함수입니다.

1.5.3.2 Case에 따라 윗 줄 Cube 제자리에 맞추기

1번 Cube를 맞췄으니 영상의 해법을 계속해서 따라가면서 나머지도 맞춰보도록 하겠습니다. 영상 4분 46초부터 보시면

2. 위층 해결하기가 나옵니다.

여기에서 나오는 Skill이 (RUrRrU) x 3 + (rLrULU) x 3 입니다. 이 Skill을 수행하게 되면 아랫면은 그대로 있고 윗면만 바뀌게 되는데 위에서 봤을 때, 아래 그림과 같이 변화하게 됩니다. ( 숫자는 Cube 번호에 맞추었습니다.)

(RUrRrU) x 3 + (rLrULU) x 3 수행 후 윗면 큐브의 변화

아랫면은 그대로기 때문에 우리는 이 Skill을 사용해서 윗면을 제 위치에 맞춰줄 수 있습니다. 현재 1번은 제자리에 위치한다고 가정하였으므로 총 5가지 Case로 나눌 수 있습니다.

 - 1, 0, 4, 5가 다 맞을 때

 - 1, 0 두 곳이 맞고 4, 5가 틀릴 때

 - 1, 5 두 곳이 맞고 0, 4가 틀릴 때

 - 1, 4 두 곳이 맞고 0, 5가 틀릴 때

 - 1 한 곳이 맞고 0, 4, 5가 틀릴 때

먼저 다 맞을 때는 아무 작업도 안해도 됩니다.

다음으로 1,0 두 곳이 맞고 4,5가 틀릴 때 입니다. 이 상황은 아래 그림과 같이 해결이 가능합니다. U -> Skill -> U

4, 5가 틀릴 때 해결법

다음으로 1, 5 두 곳이 맞고 0, 4가 틀릴 때는 아래 그림과 같이 해결이 가능합니다. Skill -> Skill -> U

0, 4가 틀릴 때 해결법

다음으로 1, 4 두 곳이 맞고 0, 5가 틀릴 때는 아래 그림과 같이 해결이 가능합니다. Skill -> U -> U

0, 5가 틀릴 때 해결법

다음은 1 한 곳만 맞고 0, 4, 5가 모두 틀렸을 때 입니다. 이 때는 2가지로 나눠서 해결할 수 있습니다. 

1번 Cube와 대각선에 있는 Cube가 3번 Cube와 Color가 맞는지 또는 7번 Cube와 Color가 맞는지로 나눠서 생각해 볼 수 있습니다. 만약 1번의 대각선 Cube가 3번 Cube와 Color가 맞다면 초기 상태가 아래 그림과 같고 해결법은 U -> U -> Skill -> rU 입니다.

0, 4, 5가 다 틀리면서 1번과 Cross 위치에 4가 있을 때

마지막으로 1번의 대각선 Cube가 7번 Cube와 Color가 맞을 때는 아래 그림과 같이 해결이 가능합니다. rU -> Skill

0, 4, 5가 다 틀리면서 1번과 Cross 위치에 0이 있을 때

위의 과정을 Code로 작성하였고 중요한 함수는 SecondStep()과 FindRightCube()에 있으니 확인해보시면 될 것 같습니다. 색깔을 찾는 Code와 회전에 관한 Code를 미리 구현해 놓으니 가져다 쓰기만 해서 편하게 코드를 짤 수 있었습니다.

이 과정까지 완료하면 색이 정확하게 맞지는 않지만 각 위치에 Cube가 알맞게 들어간 것을 확인할 수 있습니다.

1.5.3.3 윗 줄 Cube 색 맞추기

이제 마지막으로 제자리에 맞춰진 Cube의 색을 맞춰주어야 합니다. 이 때 새로운 Skill이 등장하게 되는데 바로 RrFrRF 입니다. 이 Skill을 사용하면 0번 Cube의 방향을 바꾸면서 Color를 맞출 수 있습니다. 이 Skill을 0번 Cube가 알맞는 색을 가질 때까지 적용하고 색이 맞춰지면 U Skill을 사용해서 맨 윗줄을 돌려 0번 Cube를 바꿔주는 식으로 적용하게 되면 모든 Cube의 Color까지 맞춰지게 됩니다. 아래 Code를 참고하시면 될 것 같습니다.

윗 줄 Color 맞추기

1.5.3.4 하나로 합치기

이제 이 모든 과정을 한 번에 적용해주면 우리가 원하는 2x2 Cube 맞추기를 실행할 수 있게 됩니다!!! 저는 각 Step에 Flag를 주어서 한 Step이 끝나면 다음 Step의 Flag를 true로 주고 진행하는 방법을 사용하였습니다.

FirstStep = 아래면 맞추기

SecondStep = 윗면 제자리 맞추기

FinalStep = 윗면 Color 맞추기

SetTopCubeRightLocation = 1번 Cube 제자리로 맞추기

총 진행은 Random Shuffle 후에 0키를 누르면 

FirstStep -> SetTopCubeRightLocation -> SecondStep ->

SetTopCubeRightLocation -> FinalStep -> SetTopCubeRightLocation 순서로 진행하게 하였습니다.

특별한 점은 SetTopCubeRightLocation 과정이 중간에 여러번 있어서 아래 코드와 같이 int 값으로 받아서 각 int 값마다 true 주는 Flag를 다르게 하였습니다.

int 값에 따른 Flag 변화

이제 이 모든 것을 하나로 합쳐서 실행하게 되면 아래 영상과 같이 Random으로 섞인 Cube를 스스로 풀 수 있게 됩니다!!! 여기까지 따라와주신 분들 고생많으셨습니다~!!

2x2RubiksCubeSolver.mp4

9.96MB

다음 포스팅부터는 3x3 Cube를 가지고 맞춰보는 시간을 가지겠습니다.

공지!

Code가 점점 길어지고 복잡해지고 있어서 이제는 Gitlab 주소를 남깁니다. 이곳에 Unity Project까지 함께 올려둘테니  다운 받으셔서 쓰시면 될 것 같습니다.

혹시 Git 사용이 어려우신 분들은 댓글을 남겨주시면 프로젝트 파일을 메일로 보내드리겠습니다.

Git 주소 : //gitlab.com/bshong2850/rubikspuzzle/-/tree/master

Files · master · ByeongSun Hong / RubiksPuzzle

GitLab.com

gitlab.com

Toplist

최신 우편물

태그