https://www.acmicpc.net/problem/5373
5373번: 큐빙
각 테스트 케이스에 대해서 큐브를 모두 돌린 후의 윗 면의 색상을 출력한다. 첫 번째 줄에는 뒷 면과 접하는 칸의 색을 출력하고, 두 번째, 세 번째 줄은 순서대로 출력하면 된다. 흰색은 w, 노란
www.acmicpc.net
📌구현할 기능 목록
1. 큐브를 돌릴 횟수와 방향을 입력받는다.
2. 큐브를 이중 배열 사용하여 손수 구현한다.
3. 큐브의 특정 부분을 원하는 방향으로 회전시키는 함수를 작성한다.
4. 윗면을 출력하는 함수를 작성한다.
🛠주요 로직
큐브를 이중 배열을 통해 구현하고 이를 회전시키는 작업을 수행할 것이다.
이 때, 회전 후 변경되는 큐브 내 배열의 위치를 하나라도 잘못 표기하지 않도록 주의해야한다.
(대부분 이를 준수하지 못해 틀렸습니다 판정을 받게 됨)
큐브의 특정 면을 회전시킬 때,
회전으로 인해 값 변경의 영향을 받는 4 방위 면의 값이 변경되는 배열의 위치를 조사하고
알맞은 변경 값을 대입시켜줘야한다.
위 그림은 큐브에서 Left 방향을 회전시킬 때 영향받는 4방위 면을 그림으로 나타냈다.
사람마다 면을 바라보는 방향이 달라, 면의 한 정사각형에 부여되는 좌표는 다를 수 있다.
하나 더 주의할 점이 있는데,
회전으로 인해 특정 배열값 변경을 위해 다른 값을 대입하는 경우
기존의 값을 그대로 대입하지 않고, 필요한 배열값 복사를 통해 생성한 배열 값을 대입해줘야 한다.
Front[0][0] = Up[0][0];
만약 위처럼 Front[0][0]의 값을 본 상태의 Up[0][0]값으로 입력시켰을 경우
이후에 Down[0][0]=Front[0][0]을 대입했을 때 Down[0][0]에 Up[0][0] 값이 대입되는 문제가 생기기 때문이다.
따라서
tempUp[]= { Up[0][0], Up[1][0], Up[2][0]};
tempFront[]= {Front[0][0],Front[1][0],Front[2][0]};
과 같이 필요한 값이 포함된 배열로 복사해 생성한 뒤
Fornt[0][0]=tempUp[0];
Down[0][0]=Front[0];
과 같이 대입해줘야 문제가 발생하지 않는다.
💻코드 적용
1. 큐브를 돌릴 횟수와 방향을 입력받는다.
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int T = Integer.parseInt(br.readLine()); // 테스트 케이스 횟수 입력
for(int i=0;i<T;++i){
// resetCube(); // 큐브 초기화 함수로 나중에 사용됨
int n = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
while(st.hasMoreTokens()){
String command = st.nextToken();
// rotate(command.charAt(0),command.charAt(1)); // 큐브 회전 함수로 나중에 사용됨
}
// printUpSide(); // 큐브 윗면 출력 함수로 나중에 사용됨
}
}
2. 큐브를 이중 배열 사용하여 손수 구현한다.
static char upSide[][] = {{'w','w','w'},{'w','w','w'},{'w','w','w'}};
static char downSide[][] = {{'y','y','y'},{'y','y','y'},{'y','y','y'}};
static char frontSide[][] = {{'r','r','r'},{'r','r','r'},{'r','r','r'}};
static char backSide[][] = {{'o','o','o'},{'o','o','o'},{'o','o','o'}};
static char leftSide[][] = {{'g','g','g'},{'g','g','g'},{'g','g','g'}};
static char rightSide[][] = {{'b','b','b'},{'b','b','b'},{'b','b','b'}};
3. 큐브의 특정 부분을 원하는 방향으로 회전시키는 함수를 작성한다.
static void rotate(char side, char direction){
if(side=='U'){
if(direction=='+'){
char tempUpside[][] = new char[3][3];
for(int i=0;i<3;++i){
tempUpside[i]=upSide[i].clone();
}
upSide[0][0]=tempUpside[2][0];
upSide[0][1]=tempUpside[1][0];
upSide[0][2]=tempUpside[0][0];
upSide[1][0]=tempUpside[2][1];
upSide[1][2]=tempUpside[0][1];
upSide[2][0]=tempUpside[2][2];
upSide[2][1]=tempUpside[1][2];
upSide[2][2]=tempUpside[0][2];
char tempFrontSide[] = frontSide[0].clone();
char tempLeftSide[] = leftSide[0].clone();
char tempBackSide[] = backSide[0].clone();
char tempRightSide[] = rightSide[0].clone();
frontSide[0]=tempRightSide;
leftSide[0]=tempFrontSide;
backSide[0]=tempLeftSide;
rightSide[0]=tempBackSide;
}
else if(direction=='-'){
char tempUpside[][] = new char[3][3];
for(int i=0;i<3;++i){
tempUpside[i]=upSide[i].clone();
}
upSide[0][0]=tempUpside[0][2];
upSide[0][1]=tempUpside[1][2];
upSide[0][2]=tempUpside[2][2];
upSide[1][0]=tempUpside[0][1];
upSide[1][2]=tempUpside[2][1];
upSide[2][0]=tempUpside[0][0];
upSide[2][1]=tempUpside[1][0];
upSide[2][2]=tempUpside[2][0];
char tempFrontSide[] = frontSide[0].clone();
char tempLeftSide[] = leftSide[0].clone();
char tempBackSide[] = backSide[0].clone();
char tempRightSide[] = rightSide[0].clone();
frontSide[0]=tempLeftSide;
leftSide[0]=tempBackSide;
backSide[0]=tempRightSide;
rightSide[0]=tempFrontSide;
}
}
else if(side=='D'){
if(direction=='+'){
char tempDownside[][] = new char[3][3];
for(int i=0;i<3;++i){
tempDownside[i]=downSide[i].clone();
}
downSide[0][0]=tempDownside[2][0];
downSide[0][1]=tempDownside[1][0];
downSide[0][2]=tempDownside[0][0];
downSide[1][0]=tempDownside[2][1];
downSide[1][2]=tempDownside[0][1];
downSide[2][0]=tempDownside[2][2];
downSide[2][1]=tempDownside[1][2];
downSide[2][2]=tempDownside[0][2];
char tempFrontSide[] = frontSide[2].clone();
char tempLeftSide[] = leftSide[2].clone();
char tempBackSide[] = backSide[2].clone();
char tempRightSide[] = rightSide[2].clone();
frontSide[2]=tempLeftSide;
leftSide[2]=tempBackSide;
backSide[2]=tempRightSide;
rightSide[2]=tempFrontSide;
}
else if(direction=='-'){
char tempDownside[][] = new char[3][3];
for(int i=0;i<3;++i){
tempDownside[i]=downSide[i].clone();
}
downSide[0][0]=tempDownside[0][2];
downSide[0][1]=tempDownside[1][2];
downSide[0][2]=tempDownside[2][2];
downSide[1][0]=tempDownside[0][1];
downSide[1][2]=tempDownside[2][1];
downSide[2][0]=tempDownside[0][0];
downSide[2][1]=tempDownside[1][0];
downSide[2][2]=tempDownside[2][0];
char tempFrontSide[] = frontSide[2].clone();
char tempLeftSide[] = leftSide[2].clone();
char tempBackSide[] = backSide[2].clone();
char tempRightSide[] = rightSide[2].clone();
frontSide[2]=tempRightSide;
leftSide[2]=tempFrontSide;
backSide[2]=tempLeftSide;
rightSide[2]=tempBackSide;
}
}
else if(side=='F'){
if(direction=='+'){
char tempFrontside[][] = new char[3][3];
for(int i=0;i<3;++i){
tempFrontside[i]=frontSide[i].clone();
}
frontSide[0][0]=tempFrontside[2][0];
frontSide[0][1]=tempFrontside[1][0];
frontSide[0][2]=tempFrontside[0][0];
frontSide[1][0]=tempFrontside[2][1];
frontSide[1][2]=tempFrontside[0][1];
frontSide[2][0]=tempFrontside[2][2];
frontSide[2][1]=tempFrontside[1][2];
frontSide[2][2]=tempFrontside[0][2];
char tempUpSide[] = upSide[2].clone();
char tempLeftSide[] = {leftSide[2][2],leftSide[1][2],leftSide[0][2]};
char tempDownSide[] = {downSide[0][2],downSide[0][1],downSide[0][0]};
char tempRightSide[] = {rightSide[0][0],rightSide[1][0],rightSide[2][0]};
upSide[2][0]=tempLeftSide[0];
upSide[2][1]=tempLeftSide[1];
upSide[2][2]=tempLeftSide[2];
rightSide[0][0]=tempUpSide[0];
rightSide[1][0]=tempUpSide[1];
rightSide[2][0]=tempUpSide[2];
downSide[0][2]=tempRightSide[0];
downSide[0][1]=tempRightSide[1];
downSide[0][0]=tempRightSide[2];
leftSide[2][2]=tempDownSide[0];
leftSide[1][2]=tempDownSide[1];
leftSide[0][2]=tempDownSide[2];
}
else if(direction=='-'){
char tempFrontside[][] = new char[3][3];
for(int i=0;i<3;++i){
tempFrontside[i]=frontSide[i].clone();
}
frontSide[0][0]=tempFrontside[0][2];
frontSide[0][1]=tempFrontside[1][2];
frontSide[0][2]=tempFrontside[2][2];
frontSide[1][0]=tempFrontside[0][1];
frontSide[1][2]=tempFrontside[2][1];
frontSide[2][0]=tempFrontside[0][0];
frontSide[2][1]=tempFrontside[1][0];
frontSide[2][2]=tempFrontside[2][0];
char tempUpSide[] = upSide[2].clone();
char tempLeftSide[] = {leftSide[2][2],leftSide[1][2],leftSide[0][2]};
char tempDownSide[] = {downSide[0][2],downSide[0][1],downSide[0][0]};
char tempRightSide[] = {rightSide[0][0],rightSide[1][0],rightSide[2][0]};
upSide[2][0]=tempRightSide[0];
upSide[2][1]=tempRightSide[1];
upSide[2][2]=tempRightSide[2];
rightSide[0][0]=tempDownSide[0];
rightSide[1][0]=tempDownSide[1];
rightSide[2][0]=tempDownSide[2];
downSide[0][2]=tempLeftSide[0];
downSide[0][1]=tempLeftSide[1];
downSide[0][0]=tempLeftSide[2];
leftSide[2][2]=tempUpSide[0];
leftSide[1][2]=tempUpSide[1];
leftSide[0][2]=tempUpSide[2];
}
}
else if(side=='B'){
if(direction=='+'){
char tempBackside[][] = new char[3][3];
for(int i=0;i<3;++i){
tempBackside[i]=backSide[i].clone();
}
backSide[0][0]=tempBackside[2][0];
backSide[0][1]=tempBackside[1][0];
backSide[0][2]=tempBackside[0][0];
backSide[1][0]=tempBackside[2][1];
backSide[1][2]=tempBackside[0][1];
backSide[2][0]=tempBackside[2][2];
backSide[2][1]=tempBackside[1][2];
backSide[2][2]=tempBackside[0][2];
char tempUpSide[] = {upSide[0][2],upSide[0][1],upSide[0][0]};
char tempLeftSide[] = {leftSide[0][0],leftSide[1][0],leftSide[2][0]};
char tempDownSide[] = {downSide[2][0],downSide[2][1],downSide[2][2]};
char tempRightSide[] = {rightSide[2][2],rightSide[1][2],rightSide[0][2]};
leftSide[0][0]=tempUpSide[0];
leftSide[1][0]=tempUpSide[1];
leftSide[2][0]=tempUpSide[2];
downSide[2][0]=tempLeftSide[0];
downSide[2][1]=tempLeftSide[1];
downSide[2][2]=tempLeftSide[2];
rightSide[2][2]=tempDownSide[0];
rightSide[1][2]=tempDownSide[1];
rightSide[0][2]=tempDownSide[2];
upSide[0][2]=tempRightSide[0];
upSide[0][1]=tempRightSide[1];
upSide[0][0]=tempRightSide[2];
}
else if(direction=='-'){
char tempBackside[][] = new char[3][3];
for(int i=0;i<3;++i){
tempBackside[i]=backSide[i].clone();
}
backSide[0][0]=tempBackside[0][2];
backSide[0][1]=tempBackside[1][2];
backSide[0][2]=tempBackside[2][2];
backSide[1][0]=tempBackside[0][1];
backSide[1][2]=tempBackside[2][1];
backSide[2][0]=tempBackside[0][0];
backSide[2][1]=tempBackside[1][0];
backSide[2][2]=tempBackside[2][0];
char tempUpSide[] = {upSide[0][2],upSide[0][1],upSide[0][0]};
char tempLeftSide[] = {leftSide[0][0],leftSide[1][0],leftSide[2][0]};
char tempDownSide[] = {downSide[2][0],downSide[2][1],downSide[2][2]};
char tempRightSide[] = {rightSide[2][2],rightSide[1][2],rightSide[0][2]};
leftSide[0][0]=tempDownSide[0];
leftSide[1][0]=tempDownSide[1];
leftSide[2][0]=tempDownSide[2];
downSide[2][0]=tempRightSide[0];
downSide[2][1]=tempRightSide[1];
downSide[2][2]=tempRightSide[2];
rightSide[2][2]=tempUpSide[0];
rightSide[1][2]=tempUpSide[1];
rightSide[0][2]=tempUpSide[2];
upSide[0][2]=tempLeftSide[0];
upSide[0][1]=tempLeftSide[1];
upSide[0][0]=tempLeftSide[2];
}
}
else if(side=='L'){
if(direction=='+'){
char tempLeftside[][] = new char[3][3];
for(int i=0;i<3;++i){
tempLeftside[i]=leftSide[i].clone();
}
leftSide[0][0]=tempLeftside[2][0];
leftSide[0][1]=tempLeftside[1][0];
leftSide[0][2]=tempLeftside[0][0];
leftSide[1][0]=tempLeftside[2][1];
leftSide[1][2]=tempLeftside[0][1];
leftSide[2][0]=tempLeftside[2][2];
leftSide[2][1]=tempLeftside[1][2];
leftSide[2][2]=tempLeftside[0][2];
char tempUpSide[] = {upSide[0][0],upSide[1][0],upSide[2][0]};
char tempFrontSide[] = {frontSide[0][0],frontSide[1][0],frontSide[2][0]};
char tempDownSide[] = {downSide[0][0],downSide[1][0],downSide[2][0]};
char tempBackSide[] = {backSide[2][2],backSide[1][2],backSide[0][2]};
upSide[0][0]=tempBackSide[0];
upSide[1][0]=tempBackSide[1];
upSide[2][0]=tempBackSide[2];
frontSide[0][0]=tempUpSide[0];
frontSide[1][0]=tempUpSide[1];
frontSide[2][0]=tempUpSide[2];
downSide[0][0]=tempFrontSide[0];
downSide[1][0]=tempFrontSide[1];
downSide[2][0]=tempFrontSide[2];
backSide[2][2]=tempDownSide[0];
backSide[1][2]=tempDownSide[1];
backSide[0][2]=tempDownSide[2];
}
else if(direction=='-'){
char tempLeftside[][] = new char[3][3];
for(int i=0;i<3;++i){
tempLeftside[i]=leftSide[i].clone();
}
leftSide[0][0]=tempLeftside[0][2];
leftSide[0][1]=tempLeftside[1][2];
leftSide[0][2]=tempLeftside[2][2];
leftSide[1][0]=tempLeftside[0][1];
leftSide[1][2]=tempLeftside[2][1];
leftSide[2][0]=tempLeftside[0][0];
leftSide[2][1]=tempLeftside[1][0];
leftSide[2][2]=tempLeftside[2][0];
char tempUpSide[] = {upSide[0][0],upSide[1][0],upSide[2][0]};
char tempFrontSide[] = {frontSide[0][0],frontSide[1][0],frontSide[2][0]};
char tempDownSide[] = {downSide[0][0],downSide[1][0],downSide[2][0]};
char tempBackSide[] = {backSide[2][2],backSide[1][2],backSide[0][2]};
upSide[0][0]=tempFrontSide[0];
upSide[1][0]=tempFrontSide[1];
upSide[2][0]=tempFrontSide[2];
frontSide[0][0]=tempDownSide[0];
frontSide[1][0]=tempDownSide[1];
frontSide[2][0]=tempDownSide[2];
downSide[0][0]=tempBackSide[0];
downSide[1][0]=tempBackSide[1];
downSide[2][0]=tempBackSide[2];
backSide[2][2]=tempUpSide[0];
backSide[1][2]=tempUpSide[1];
backSide[0][2]=tempUpSide[2];
}
}
else if(side=='R'){
if(direction=='+'){
char tempRightside[][] = new char[3][3];
for(int i=0;i<3;++i){
tempRightside[i]=rightSide[i].clone();
}
rightSide[0][0]=tempRightside[2][0];
rightSide[0][1]=tempRightside[1][0];
rightSide[0][2]=tempRightside[0][0];
rightSide[1][0]=tempRightside[2][1];
rightSide[1][2]=tempRightside[0][1];
rightSide[2][0]=tempRightside[2][2];
rightSide[2][1]=tempRightside[1][2];
rightSide[2][2]=tempRightside[0][2];
char tempUpSide[] = {upSide[2][2],upSide[1][2],upSide[0][2]};
char tempFrontSide[] = {frontSide[2][2],frontSide[1][2],frontSide[0][2]};
char tempDownSide[] = {downSide[2][2],downSide[1][2],downSide[0][2]};
char tempBackSide[] = {backSide[0][0],backSide[1][0],backSide[2][0]};
upSide[2][2]=tempFrontSide[0];
upSide[1][2]=tempFrontSide[1];
upSide[0][2]=tempFrontSide[2];
backSide[0][0]=tempUpSide[0];
backSide[1][0]=tempUpSide[1];
backSide[2][0]=tempUpSide[2];
downSide[2][2]=tempBackSide[0];
downSide[1][2]=tempBackSide[1];
downSide[0][2]=tempBackSide[2];
frontSide[2][2]=tempDownSide[0];
frontSide[1][2]=tempDownSide[1];
frontSide[0][2]=tempDownSide[2];
}
else if(direction=='-'){
char tempRightside[][] = new char[3][3];
for(int i=0;i<3;++i){
tempRightside[i]=rightSide[i].clone();
}
rightSide[0][0]=tempRightside[0][2];
rightSide[0][1]=tempRightside[1][2];
rightSide[0][2]=tempRightside[2][2];
rightSide[1][0]=tempRightside[0][1];
rightSide[1][2]=tempRightside[2][1];
rightSide[2][0]=tempRightside[0][0];
rightSide[2][1]=tempRightside[1][0];
rightSide[2][2]=tempRightside[2][0];
char tempUpSide[] = {upSide[2][2],upSide[1][2],upSide[0][2]};
char tempFrontSide[] = {frontSide[2][2],frontSide[1][2],frontSide[0][2]};
char tempDownSide[] = {downSide[2][2],downSide[1][2],downSide[0][2]};
char tempBackSide[] = {backSide[0][0],backSide[1][0],backSide[2][0]};
upSide[2][2]=tempBackSide[0];
upSide[1][2]=tempBackSide[1];
upSide[0][2]=tempBackSide[2];
backSide[0][0]=tempDownSide[0];
backSide[1][0]=tempDownSide[1];
backSide[2][0]=tempDownSide[2];
downSide[2][2]=tempFrontSide[0];
downSide[1][2]=tempFrontSide[1];
downSide[0][2]=tempFrontSide[2];
frontSide[2][2]=tempUpSide[0];
frontSide[1][2]=tempUpSide[1];
frontSide[0][2]=tempUpSide[2];
}
}
}
4. 윗면을 출력하는 함수를 작성한다.
static void printUpSide(){
for(int i=0;i<3;++i){
for(int j=0;j<3;++j){
System.out.print(upSide[i][j]);
}
System.out.println();
}
}
⌨제출 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static char upSide[][] = {{'w','w','w'},{'w','w','w'},{'w','w','w'}};
static char downSide[][] = {{'y','y','y'},{'y','y','y'},{'y','y','y'}};
static char frontSide[][] = {{'r','r','r'},{'r','r','r'},{'r','r','r'}};
static char backSide[][] = {{'o','o','o'},{'o','o','o'},{'o','o','o'}};
static char leftSide[][] = {{'g','g','g'},{'g','g','g'},{'g','g','g'}};
static char rightSide[][] = {{'b','b','b'},{'b','b','b'},{'b','b','b'}};
static void resetCube(){
upSide = new char[][]{{'w', 'w', 'w'}, {'w', 'w', 'w'}, {'w', 'w', 'w'}};
downSide = new char[][]{{'y','y','y'},{'y','y','y'},{'y','y','y'}};
frontSide = new char[][]{{'r','r','r'},{'r','r','r'},{'r','r','r'}};
backSide = new char[][]{{'o','o','o'},{'o','o','o'},{'o','o','o'}};
leftSide = new char[][]{{'g','g','g'},{'g','g','g'},{'g','g','g'}};
rightSide = new char[][]{{'b','b','b'},{'b','b','b'},{'b','b','b'}};
}
static void rotate(char side, char direction){
if(side=='U'){
if(direction=='+'){
char tempUpside[][] = new char[3][3];
for(int i=0;i<3;++i){
tempUpside[i]=upSide[i].clone();
}
upSide[0][0]=tempUpside[2][0];
upSide[0][1]=tempUpside[1][0];
upSide[0][2]=tempUpside[0][0];
upSide[1][0]=tempUpside[2][1];
upSide[1][2]=tempUpside[0][1];
upSide[2][0]=tempUpside[2][2];
upSide[2][1]=tempUpside[1][2];
upSide[2][2]=tempUpside[0][2];
char tempFrontSide[] = frontSide[0].clone();
char tempLeftSide[] = leftSide[0].clone();
char tempBackSide[] = backSide[0].clone();
char tempRightSide[] = rightSide[0].clone();
frontSide[0]=tempRightSide;
leftSide[0]=tempFrontSide;
backSide[0]=tempLeftSide;
rightSide[0]=tempBackSide;
}
else if(direction=='-'){
char tempUpside[][] = new char[3][3];
for(int i=0;i<3;++i){
tempUpside[i]=upSide[i].clone();
}
upSide[0][0]=tempUpside[0][2];
upSide[0][1]=tempUpside[1][2];
upSide[0][2]=tempUpside[2][2];
upSide[1][0]=tempUpside[0][1];
upSide[1][2]=tempUpside[2][1];
upSide[2][0]=tempUpside[0][0];
upSide[2][1]=tempUpside[1][0];
upSide[2][2]=tempUpside[2][0];
char tempFrontSide[] = frontSide[0].clone();
char tempLeftSide[] = leftSide[0].clone();
char tempBackSide[] = backSide[0].clone();
char tempRightSide[] = rightSide[0].clone();
frontSide[0]=tempLeftSide;
leftSide[0]=tempBackSide;
backSide[0]=tempRightSide;
rightSide[0]=tempFrontSide;
}
}
else if(side=='D'){
if(direction=='+'){
char tempDownside[][] = new char[3][3];
for(int i=0;i<3;++i){
tempDownside[i]=downSide[i].clone();
}
downSide[0][0]=tempDownside[2][0];
downSide[0][1]=tempDownside[1][0];
downSide[0][2]=tempDownside[0][0];
downSide[1][0]=tempDownside[2][1];
downSide[1][2]=tempDownside[0][1];
downSide[2][0]=tempDownside[2][2];
downSide[2][1]=tempDownside[1][2];
downSide[2][2]=tempDownside[0][2];
char tempFrontSide[] = frontSide[2].clone();
char tempLeftSide[] = leftSide[2].clone();
char tempBackSide[] = backSide[2].clone();
char tempRightSide[] = rightSide[2].clone();
frontSide[2]=tempLeftSide;
leftSide[2]=tempBackSide;
backSide[2]=tempRightSide;
rightSide[2]=tempFrontSide;
}
else if(direction=='-'){
char tempDownside[][] = new char[3][3];
for(int i=0;i<3;++i){
tempDownside[i]=downSide[i].clone();
}
downSide[0][0]=tempDownside[0][2];
downSide[0][1]=tempDownside[1][2];
downSide[0][2]=tempDownside[2][2];
downSide[1][0]=tempDownside[0][1];
downSide[1][2]=tempDownside[2][1];
downSide[2][0]=tempDownside[0][0];
downSide[2][1]=tempDownside[1][0];
downSide[2][2]=tempDownside[2][0];
char tempFrontSide[] = frontSide[2].clone();
char tempLeftSide[] = leftSide[2].clone();
char tempBackSide[] = backSide[2].clone();
char tempRightSide[] = rightSide[2].clone();
frontSide[2]=tempRightSide;
leftSide[2]=tempFrontSide;
backSide[2]=tempLeftSide;
rightSide[2]=tempBackSide;
}
}
else if(side=='F'){
if(direction=='+'){
char tempFrontside[][] = new char[3][3];
for(int i=0;i<3;++i){
tempFrontside[i]=frontSide[i].clone();
}
frontSide[0][0]=tempFrontside[2][0];
frontSide[0][1]=tempFrontside[1][0];
frontSide[0][2]=tempFrontside[0][0];
frontSide[1][0]=tempFrontside[2][1];
frontSide[1][2]=tempFrontside[0][1];
frontSide[2][0]=tempFrontside[2][2];
frontSide[2][1]=tempFrontside[1][2];
frontSide[2][2]=tempFrontside[0][2];
char tempUpSide[] = upSide[2].clone();
char tempLeftSide[] = {leftSide[2][2],leftSide[1][2],leftSide[0][2]};
char tempDownSide[] = {downSide[0][2],downSide[0][1],downSide[0][0]};
char tempRightSide[] = {rightSide[0][0],rightSide[1][0],rightSide[2][0]};
upSide[2][0]=tempLeftSide[0];
upSide[2][1]=tempLeftSide[1];
upSide[2][2]=tempLeftSide[2];
rightSide[0][0]=tempUpSide[0];
rightSide[1][0]=tempUpSide[1];
rightSide[2][0]=tempUpSide[2];
downSide[0][2]=tempRightSide[0];
downSide[0][1]=tempRightSide[1];
downSide[0][0]=tempRightSide[2];
leftSide[2][2]=tempDownSide[0];
leftSide[1][2]=tempDownSide[1];
leftSide[0][2]=tempDownSide[2];
}
else if(direction=='-'){
char tempFrontside[][] = new char[3][3];
for(int i=0;i<3;++i){
tempFrontside[i]=frontSide[i].clone();
}
frontSide[0][0]=tempFrontside[0][2];
frontSide[0][1]=tempFrontside[1][2];
frontSide[0][2]=tempFrontside[2][2];
frontSide[1][0]=tempFrontside[0][1];
frontSide[1][2]=tempFrontside[2][1];
frontSide[2][0]=tempFrontside[0][0];
frontSide[2][1]=tempFrontside[1][0];
frontSide[2][2]=tempFrontside[2][0];
char tempUpSide[] = upSide[2].clone();
char tempLeftSide[] = {leftSide[2][2],leftSide[1][2],leftSide[0][2]};
char tempDownSide[] = {downSide[0][2],downSide[0][1],downSide[0][0]};
char tempRightSide[] = {rightSide[0][0],rightSide[1][0],rightSide[2][0]};
upSide[2][0]=tempRightSide[0];
upSide[2][1]=tempRightSide[1];
upSide[2][2]=tempRightSide[2];
rightSide[0][0]=tempDownSide[0];
rightSide[1][0]=tempDownSide[1];
rightSide[2][0]=tempDownSide[2];
downSide[0][2]=tempLeftSide[0];
downSide[0][1]=tempLeftSide[1];
downSide[0][0]=tempLeftSide[2];
leftSide[2][2]=tempUpSide[0];
leftSide[1][2]=tempUpSide[1];
leftSide[0][2]=tempUpSide[2];
}
}
else if(side=='B'){
if(direction=='+'){
char tempBackside[][] = new char[3][3];
for(int i=0;i<3;++i){
tempBackside[i]=backSide[i].clone();
}
backSide[0][0]=tempBackside[2][0];
backSide[0][1]=tempBackside[1][0];
backSide[0][2]=tempBackside[0][0];
backSide[1][0]=tempBackside[2][1];
backSide[1][2]=tempBackside[0][1];
backSide[2][0]=tempBackside[2][2];
backSide[2][1]=tempBackside[1][2];
backSide[2][2]=tempBackside[0][2];
char tempUpSide[] = {upSide[0][2],upSide[0][1],upSide[0][0]};
char tempLeftSide[] = {leftSide[0][0],leftSide[1][0],leftSide[2][0]};
char tempDownSide[] = {downSide[2][0],downSide[2][1],downSide[2][2]};
char tempRightSide[] = {rightSide[2][2],rightSide[1][2],rightSide[0][2]};
leftSide[0][0]=tempUpSide[0];
leftSide[1][0]=tempUpSide[1];
leftSide[2][0]=tempUpSide[2];
downSide[2][0]=tempLeftSide[0];
downSide[2][1]=tempLeftSide[1];
downSide[2][2]=tempLeftSide[2];
rightSide[2][2]=tempDownSide[0];
rightSide[1][2]=tempDownSide[1];
rightSide[0][2]=tempDownSide[2];
upSide[0][2]=tempRightSide[0];
upSide[0][1]=tempRightSide[1];
upSide[0][0]=tempRightSide[2];
}
else if(direction=='-'){
char tempBackside[][] = new char[3][3];
for(int i=0;i<3;++i){
tempBackside[i]=backSide[i].clone();
}
backSide[0][0]=tempBackside[0][2];
backSide[0][1]=tempBackside[1][2];
backSide[0][2]=tempBackside[2][2];
backSide[1][0]=tempBackside[0][1];
backSide[1][2]=tempBackside[2][1];
backSide[2][0]=tempBackside[0][0];
backSide[2][1]=tempBackside[1][0];
backSide[2][2]=tempBackside[2][0];
char tempUpSide[] = {upSide[0][2],upSide[0][1],upSide[0][0]};
char tempLeftSide[] = {leftSide[0][0],leftSide[1][0],leftSide[2][0]};
char tempDownSide[] = {downSide[2][0],downSide[2][1],downSide[2][2]};
char tempRightSide[] = {rightSide[2][2],rightSide[1][2],rightSide[0][2]};
leftSide[0][0]=tempDownSide[0];
leftSide[1][0]=tempDownSide[1];
leftSide[2][0]=tempDownSide[2];
downSide[2][0]=tempRightSide[0];
downSide[2][1]=tempRightSide[1];
downSide[2][2]=tempRightSide[2];
rightSide[2][2]=tempUpSide[0];
rightSide[1][2]=tempUpSide[1];
rightSide[0][2]=tempUpSide[2];
upSide[0][2]=tempLeftSide[0];
upSide[0][1]=tempLeftSide[1];
upSide[0][0]=tempLeftSide[2];
}
}
else if(side=='L'){
if(direction=='+'){
char tempLeftside[][] = new char[3][3];
for(int i=0;i<3;++i){
tempLeftside[i]=leftSide[i].clone();
}
leftSide[0][0]=tempLeftside[2][0];
leftSide[0][1]=tempLeftside[1][0];
leftSide[0][2]=tempLeftside[0][0];
leftSide[1][0]=tempLeftside[2][1];
leftSide[1][2]=tempLeftside[0][1];
leftSide[2][0]=tempLeftside[2][2];
leftSide[2][1]=tempLeftside[1][2];
leftSide[2][2]=tempLeftside[0][2];
char tempUpSide[] = {upSide[0][0],upSide[1][0],upSide[2][0]};
char tempFrontSide[] = {frontSide[0][0],frontSide[1][0],frontSide[2][0]};
char tempDownSide[] = {downSide[0][0],downSide[1][0],downSide[2][0]};
char tempBackSide[] = {backSide[2][2],backSide[1][2],backSide[0][2]};
upSide[0][0]=tempBackSide[0];
upSide[1][0]=tempBackSide[1];
upSide[2][0]=tempBackSide[2];
frontSide[0][0]=tempUpSide[0];
frontSide[1][0]=tempUpSide[1];
frontSide[2][0]=tempUpSide[2];
downSide[0][0]=tempFrontSide[0];
downSide[1][0]=tempFrontSide[1];
downSide[2][0]=tempFrontSide[2];
backSide[2][2]=tempDownSide[0];
backSide[1][2]=tempDownSide[1];
backSide[0][2]=tempDownSide[2];
}
else if(direction=='-'){
char tempLeftside[][] = new char[3][3];
for(int i=0;i<3;++i){
tempLeftside[i]=leftSide[i].clone();
}
leftSide[0][0]=tempLeftside[0][2];
leftSide[0][1]=tempLeftside[1][2];
leftSide[0][2]=tempLeftside[2][2];
leftSide[1][0]=tempLeftside[0][1];
leftSide[1][2]=tempLeftside[2][1];
leftSide[2][0]=tempLeftside[0][0];
leftSide[2][1]=tempLeftside[1][0];
leftSide[2][2]=tempLeftside[2][0];
char tempUpSide[] = {upSide[0][0],upSide[1][0],upSide[2][0]};
char tempFrontSide[] = {frontSide[0][0],frontSide[1][0],frontSide[2][0]};
char tempDownSide[] = {downSide[0][0],downSide[1][0],downSide[2][0]};
char tempBackSide[] = {backSide[2][2],backSide[1][2],backSide[0][2]};
upSide[0][0]=tempFrontSide[0];
upSide[1][0]=tempFrontSide[1];
upSide[2][0]=tempFrontSide[2];
frontSide[0][0]=tempDownSide[0];
frontSide[1][0]=tempDownSide[1];
frontSide[2][0]=tempDownSide[2];
downSide[0][0]=tempBackSide[0];
downSide[1][0]=tempBackSide[1];
downSide[2][0]=tempBackSide[2];
backSide[2][2]=tempUpSide[0];
backSide[1][2]=tempUpSide[1];
backSide[0][2]=tempUpSide[2];
}
}
else if(side=='R'){
if(direction=='+'){
char tempRightside[][] = new char[3][3];
for(int i=0;i<3;++i){
tempRightside[i]=rightSide[i].clone();
}
rightSide[0][0]=tempRightside[2][0];
rightSide[0][1]=tempRightside[1][0];
rightSide[0][2]=tempRightside[0][0];
rightSide[1][0]=tempRightside[2][1];
rightSide[1][2]=tempRightside[0][1];
rightSide[2][0]=tempRightside[2][2];
rightSide[2][1]=tempRightside[1][2];
rightSide[2][2]=tempRightside[0][2];
char tempUpSide[] = {upSide[2][2],upSide[1][2],upSide[0][2]};
char tempFrontSide[] = {frontSide[2][2],frontSide[1][2],frontSide[0][2]};
char tempDownSide[] = {downSide[2][2],downSide[1][2],downSide[0][2]};
char tempBackSide[] = {backSide[0][0],backSide[1][0],backSide[2][0]};
upSide[2][2]=tempFrontSide[0];
upSide[1][2]=tempFrontSide[1];
upSide[0][2]=tempFrontSide[2];
backSide[0][0]=tempUpSide[0];
backSide[1][0]=tempUpSide[1];
backSide[2][0]=tempUpSide[2];
downSide[2][2]=tempBackSide[0];
downSide[1][2]=tempBackSide[1];
downSide[0][2]=tempBackSide[2];
frontSide[2][2]=tempDownSide[0];
frontSide[1][2]=tempDownSide[1];
frontSide[0][2]=tempDownSide[2];
}
else if(direction=='-'){
char tempRightside[][] = new char[3][3];
for(int i=0;i<3;++i){
tempRightside[i]=rightSide[i].clone();
}
rightSide[0][0]=tempRightside[0][2];
rightSide[0][1]=tempRightside[1][2];
rightSide[0][2]=tempRightside[2][2];
rightSide[1][0]=tempRightside[0][1];
rightSide[1][2]=tempRightside[2][1];
rightSide[2][0]=tempRightside[0][0];
rightSide[2][1]=tempRightside[1][0];
rightSide[2][2]=tempRightside[2][0];
char tempUpSide[] = {upSide[2][2],upSide[1][2],upSide[0][2]};
char tempFrontSide[] = {frontSide[2][2],frontSide[1][2],frontSide[0][2]};
char tempDownSide[] = {downSide[2][2],downSide[1][2],downSide[0][2]};
char tempBackSide[] = {backSide[0][0],backSide[1][0],backSide[2][0]};
upSide[2][2]=tempBackSide[0];
upSide[1][2]=tempBackSide[1];
upSide[0][2]=tempBackSide[2];
backSide[0][0]=tempDownSide[0];
backSide[1][0]=tempDownSide[1];
backSide[2][0]=tempDownSide[2];
downSide[2][2]=tempFrontSide[0];
downSide[1][2]=tempFrontSide[1];
downSide[0][2]=tempFrontSide[2];
frontSide[2][2]=tempUpSide[0];
frontSide[1][2]=tempUpSide[1];
frontSide[0][2]=tempUpSide[2];
}
}
}
static void printUpSide(){
for(int i=0;i<3;++i){
for(int j=0;j<3;++j){
System.out.print(upSide[i][j]);
}
System.out.println();
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int T = Integer.parseInt(br.readLine());
for(int i=0;i<T;++i){
resetCube();
int n = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
while(st.hasMoreTokens()){
String command = st.nextToken();
rotate(command.charAt(0),command.charAt(1));
}
printUpSide();
}
}
}
'알고리즘||코딩테스트 > 삼성 SW 역량테스트' 카테고리의 다른 글
[BOJ 21609] 상어 중학교 - JAVA, Gold2 (1) | 2023.12.29 |
---|---|
[BOJ 13460] 구슬 탈출 2 - JAVA, Gold1 (1) | 2023.12.19 |
[BOJ 15684] 사다리 조작 - JAVA, Gold3 (0) | 2023.12.17 |
[BOJ 15685] 드래곤 커브 - JAVA, Gold3 (1) | 2023.12.15 |
[BOJ 14890] 경사로 - JAVA, Gold3 (1) | 2023.11.03 |