본문 바로가기
Computer Science/Problem Solve

백준 5373 큐빙

by snfjddl 2020. 9. 1.

출처 : Baekjoon Online Judge

이 문제는 친구가 추천해줘서 풀어본 순수 구현 문제이다.

문제 이름 그대로 큐브를 하는 것을 떠올리면서 행렬들의 값을 만지면 되는 간단한(?) 문제이다.

 

 

풀이

 

필요한 알고리즘은 딱히 보이지 않았고 시간과 노력으로 풀 수 있는 문제인 듯

코딩을 시작하기 전 노트에 6면의 움직임을 직접 그리면서 표현해보고 연계적인 동작을 설계하는 시간을 가진다면

막힘없이 코드를 작성할 수 있을 것이다!

나는 이런식으로 인덱스를 적으면서 전개도를 그려보았다

 

소스코드가 너무 복잡하고 반복적이어서 "윗면"의 코드만 일부 발췌해왔다.

 

코드

static void cubing(char face, char direc) {
		char[] tmp = new char[3];
		char[][] change = new char[3][3];
		switch(face) {
		case 'U' :
			if(direc == '+') {	 // +, - 구분해서 돌리기
				for(int i=0 ; i<3 ; i++) {
					tmp[i] = B[2][i];
					B[2][i] = L[0][2-i];	L[0][2-i] = F[0][2-i];
					F[0][2-i] = R[0][2-i];	R[0][2-i] = tmp[i];
				}
				
				for(int i=0 ; i<3 ; i++) {			
                //	돌렸을때 face의 변경사항 적용
					change[0][i] = U[2-i][0];
					change[1][i] = U[2-i][1];
					change[2][i] = U[2-i][2];
				}
				U = change.clone();
			}
			else {
				for(int i=0 ; i<3 ; i++) {
					tmp[i] = B[2][i];
					B[2][i] = R[0][2-i];	R[0][2-i] = F[0][2-i];
					F[0][2-i] = L[0][2-i];	L[0][2-i] = tmp[i];
				}
				
				for(int i=0 ; i<3 ; i++) {			
                //	돌렸을때 face의 변경사항 적용
					change[0][i] = U[i][2];
					change[1][i] = U[i][1];
					change[2][i] = U[i][0];
				}
				U = change.clone();
			}
			break;
            ...

 

반응형

댓글