이 문제는 친구가 추천해줘서 풀어본 순수 구현 문제이다.
문제 이름 그대로 큐브를 하는 것을 떠올리면서 행렬들의 값을 만지면 되는 간단한(?) 문제이다.
풀이
필요한 알고리즘은 딱히 보이지 않았고 시간과 노력으로 풀 수 있는 문제인 듯
코딩을 시작하기 전 노트에 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;
...
반응형
'Computer Science > Problem Solve' 카테고리의 다른 글
2021 카카오 인턴십 - 거리두기 확인하기 (0) | 2021.08.27 |
---|---|
2018 카카오 블라인드 채용 - [1차] 셔틀버스 (0) | 2021.08.16 |
Codility Lesson4 MaxCounters (0) | 2021.07.17 |
백준 3954 Brainf**k 인터프리터 (0) | 2021.02.03 |
백준 N9251_LCS(Longest Common Subsequence) (0) | 2020.08.12 |
댓글