2020-12-09-TIL
개발자는 에러메시지가 있는 것에 대해 감사하게 생각해야한다. 왜냐하면 에러메시지조차 없다면 문제가 있을때 그 원인을 찾을 단서조차 없는것과 마찬가지이기 때문이다.
루빅스 큐브 구현 미션
콘솔에서 루빅스 큐브를 돌리는 프로그램을 만드는 미션을 진행했다. 큐브의 여섯 면을 한 장의 전개도로 펼쳐 출력한다. 위에 한 면, 가운데 줄에 네 면, 아래에 한 면을 놓고, 각 칸은 색의 첫 글자(B, W, O, G, Y, R)로 표시한다. 모든 면이 한 가지 색으로 맞춰진 상태는 다음과 같다.
1
2
3
4
5
6
7
8
9
10
11
B B B
B B B
B B B
W W W O O O G G G Y Y Y
W W W O O O G G G Y Y Y
W W W O O O G G G Y Y Y
R R R
R R R
R R R
회전 기호
입력은 큐브 표기법을 따른다. 세계 큐브 협회(WCA) 규정 12a에 따르면 F, B, R, L, U, D는 각각 앞, 뒤, 오른쪽, 왼쪽, 윗면, 아랫면을 시계 방향으로 90도 돌리는 동작이다. 기호 뒤에 '가 붙으면 반시계 방향 90도, 2가 붙으면 180도 회전이다. 그래서 F2는 FF와 같고, F와 F'를 이어서 하면 제자리로 돌아온다.
이런 입력을 처리하려면 문자열을 한 글자씩 읽되, 뒤에 '나 2가 오는지 함께 봐야 한다. F'F'처럼 기호가 붙어서 들어오므로 공백으로 나누는 방식으로는 파싱할 수 없다.
섞은 순서를 거꾸로 풀기
초기상태 : BRF2F
시작할 때 BRF2F, 즉 B, R, F2, F 순서로 섞었다. 섞은 동작을 되돌리려면 마지막 동작부터 거꾸로, 각 동작의 반대 방향으로 돌리면 된다. F의 반대는 F', F2의 반대는 F2(F'F'로 써도 같다), R의 반대는 R', B의 반대는 B'이다. 그래서 F'F'F'R'B' 다섯 번으로 맞춰진다. 아래 출력에서 한 동작마다 바뀐 상태를 볼 수 있다.
1
2
3
4
5
6
7
8
9
10
11
B B G
B B O
B B O
O O O G G R Y Y Y B W W
W W W O O R G G G B Y Y
O O R G G G B Y Y W W W
R R W
R R Y
R R Y
CUBE> F’F’F’R’B’
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
F'
B B G
B B O
B B O
O O O G G R Y Y Y B W W
W W W O O R G G G B Y Y
G G G B Y Y W W W O O R
R R W
R R Y
R R Y
F'
B B G
B B O
B B O
O O O G G R Y Y Y B W W
W W W O O R G G G B Y Y
B Y Y W W W O O R G G G
R R W
R R Y
R R Y
F'
B B G
B B O
B B O
O O O G G R Y Y Y B W W
W W W O O R G G G B Y Y
W W W O O R G G G B Y Y
R R W
R R Y
R R Y
R'
B B B
B B B
B B B
O O O G G G Y Y Y W W W
W W W O O O G G G Y Y Y
W W W O O O G G G Y Y Y
R R R
R R R
R R R
B'
B B B
B B B
B B B
W W W O O O G G G Y Y Y
W W W O O O G G G Y Y Y
W W W O O O G G G Y Y Y
R R R
R R R
R R R
축하합니다!!! 정답입니다!!!
경과시간: 01:08
조작갯수: 5
이용해주셔서 감사합니다. 뚜뚜뚜.
회전 문자열 메모
함께 적어 둔 회전 문자열들이다. 첫 줄은 여섯 면을 정방향과 역방향으로 한 번씩 돌린 뒤 180도 회전을 이어 붙인 형태라, 기호 종류별 처리를 한 번에 확인하기 좋다. 정방향과 역방향이 짝지어 있으므로 앞부분 FF'RR'UU'BB'LL'DD'만 돌리면 큐브는 원래 상태로 돌아와야 한다.
1
2
3
4
5
FF'RR'UU'BB'LL'DD'F2R2U2B2L2D2
R'DDU'B2R2B2F'D2B'B
B'BD'D'FB'B'R'R'B'B'UD'D'R
DL'D2RD'
DR'D'D'LD'
댓글
아직 댓글이 없습니다