Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- Embedded
- 부트시퀀스
- 관계형 모델
- 릿코드
- leetcode
- Djikstra
- 네트워크
- STL
- 데이터베이스
- Network
- 문제풀이
- 백준
- 응용 계층
- Database
- ps
- 다익스트라
- 프로그래머스
- Transport layer
- DB
- BHS
- swea
- 전송 계층
- BST
- baekjoon
- dp
- boot sequence
- Application Layer
- 자료구조
- 임베디드
- C++
Archives
- Today
- Total
BOBO's Note
[ Baekjoon ] 5373. 큐빙 본문
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