BOBO's Note

[ Baekjoon ] 5373. 큐빙 본문

Algorithm/Problem Solving

[ Baekjoon ] 5373. 큐빙

bobo_hee 2020. 5. 31. 21:19

https://www.acmicpc.net/problem/5373

 

5373번: 큐빙

문제 루빅스 큐브는 삼차원 퍼즐이다. 보통 루빅스 큐브는 3×3×3개의 작은 정육면체로 이루어져 있다. 퍼즐을 풀려면 각 면에 있는 아홉 개의 작은 정육면체의 색이 동일해야 한다. 큐브는 각 면

www.acmicpc.net

풀이 방법

큐브의 각 면의 상태와 회전 등을 Cube라는 클래스로 나타냈다.

#define CUBE_SIZE 3
enum {UP, DOWN, FRONT, BACK, LEFT, RIGHT};

class Cube{
public:
	Cube(){
		char colors[6] = {'w', 'y', 'r', 'o', 'g', 'b'};
		for(int i=0; i<6; i++){
			for(int j=0; j<CUBE_SIZE; j++){
				for(int k=0; k<CUBE_SIZE; k++){
					cube[i][j][k] = colors[i];
				}
			}
		}
	}
	void rotate(char side, bool clockwise=true);
	void print_side(int side){
		for(int i=0; i<CUBE_SIZE; i++){
			for(int j=0; j<CUBE_SIZE; j++){
				cout << cube[side][i][j];
			}
			cout << '\n';
		}
	}
private:
	char cube[6][CUBE_SIZE][CUBE_SIZE];

	// line0 -> line1 -> line2 -> line3 -> line0
	void shift(char* line0, char* line1, char* line2, char* line3);
	void rotate_side(int side, bool clockwise=true);
};

3*3 큐브가 아래와 같은 단면도를 갖는다고 할 때, 6*3*3 배열에 각 면의 값을 저장했다. 이때, UP, DOWN, FRONT,  BACK, LEFT, RIGHT 순으로 저장한다.

큐브 단면도

큐브의 임의의 면을 시계방향 또는 반시계방향으로 회전하는 메소드는 rotate()이다. 큐브의 면을 회전할 때 해당 면 뿐만 아니라 인접한 네 면의 모서리도 함께 회전된다는 점이다. 각 면에 대해 이를 하드코딩했다.

 

전체 코드는 여기서 확인할 수 있다.

'Algorithm > Problem Solving' 카테고리의 다른 글

[ Baekjoon ] 1920. 수 찾기  (0) 2020.06.01
[ Baekjoon ] 17837. 새로운 게임2  (0) 2020.05.31
[ Baekjoon ] 10217. KCM Travel  (0) 2020.05.28
[ Baekjoon ] 1753. 최단 거리  (0) 2020.05.27
[ Baekjoon ] 3190. 뱀  (1) 2020.05.23
Comments