알고리즘/BOJ

백준 5373번 큐빙

꾸준함. 2019. 4. 29. 02:28

문제 링크입니다: https://www.acmicpc.net/problem/5373

 

5373번: 큐빙

문제 루빅스 큐브는 삼차원 퍼즐이다. 보통 루빅스 큐브는 3×3×3개의 작은 정육면체로 이루어져 있다. 퍼즐을 풀려면 각 면에 있는 아홉 개의 작은 정육면체의 색이 동일해야 한다. 큐브는 각 면을 양방향으로 90도 만큼 돌릴 수 있도록 만들어져 있다. 회전이 마친 이후에는, 다른 면을 돌릴 수 있다. 이렇게 큐브의 서로 다른 면을 돌리다 보면, 색을 섞을 수 있다. 이 문제에서는 루빅스 큐브가 모두 풀린 상태에서 시작한다. 윗 면은 흰색, 아랫 면은 노란

www.acmicpc.net

단순 시뮬레이션 문제지만 접근 방법을 잘 생각하고 풀어야하는 문제였습니다.

저는 접근방법을 레바스님(https://rebas.kr/794)의 블로그를 참고해서 풀었습니다.

 

우선, 주사위 전개도를 생각해봐야합니다.

위와 같은 구조이기 때문에, 윗면(U)와 아랫면(D) 같은 경우에는 L, F, R, B에 대해서 순서대로 돌리면 됩니다.

반대로, 왼쪽면, 앞면, 오른쪽면, 뒷면 같은 경우에는 U, D까지 고려해야하기 때문에 추가적인 변수 idx를 이용해 구현해야합니다.

 

알고리즘은 아래와 같습니다.

1. 배열을 6 * 3 * 3으로 구현해 맨 앞 인덱스는(U, D, F, B, L, R) 순으로 부여하고 나머지 3 * 3에는 색깔을 칠해줍니다.

2. 어떻게 돌릴지를 입력받고 아래와 같은 2가지 함수를 구현해야합니다.

2.1 해당 면을 먼저 돌리고

2.2 나머지 면들의 변화를 적용합니다.

3. 윗면의 색깔들을 모두 출력합니다.

 

시계방향, 반시계방향으로 돌리는 함수와 U, D, F, B, L, R 함수 모두 코드를 보면 이해가 되실겁니다.

 

 

 

개발환경:Visual Studio 2017

 

지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형

'알고리즘 > BOJ' 카테고리의 다른 글

백준 3190번 뱀  (5) 2019.05.01
백준 14499번 주사위 굴리기  (0) 2019.04.30
백준 14503번 로봇 청소기  (2) 2019.04.28
백준 15662번 톱니바퀴(2)  (0) 2019.04.27
백준 16235번 나무 재테크  (2) 2019.04.14