-
BOJ 16939 : 2x2x2 큐브알고리즘 2023. 7. 29. 19:38
#BOJ 16939 : 2x2x2 큐브
16939번: 2×2×2 큐브
첫째 줄에 2×2×2 루빅스 큐브 각 면의 각 칸 색상이 주어진다. 색상은 1부터 6까지의 자연수로 나타내며, 각 자연수는 총 4번 등장한다. i번째 수가 의미하는 칸은 아래와 같다.
www.acmicpc.net
#풀이
처음으로 랜덤하게 문제를 풀었다.
보자마자 구현 문제라는 것을 알았고 2x2x2 큐브에 대한 문제이다.
큐브를 한번만 움직여서 정말 쉬운 문제였다.
큐브가 움직일 수 방향은 총 6가지가 된다.
내가 보고 있는 면이 5,6,7,8 이라고 할 때
1. 5,7 을 위로 회전
2. 5,7 을 아래로 회전
3. 5,7 좌로 회전
4. 5,7 우로 회전
5. 1,2 좌로 회전
6. 1,2 우로 회전
이렇게 6가지의 회전이 있다.
회전을 하면 2개씩 4개가 움직인다. 움직이고 나서의 면에서의 색이 맞았는지 판별해야 한다.
조금 많이 귀찮다;;
#코드
#include<bits/stdc++.h> using namespace std; int cube[25]; //내가 바라보는 면 5,6,7,8 bool func1(){//1열 상 회전o if(cube[5] == cube[7] && cube[2] == cube[4] && cube[5] == cube[2] && cube[1] == cube[3] && cube[21] == cube[23] && cube[23] == cube[1] && cube[9] == cube[11] && cube[6] == cube[8] && cube[6] == cube[9] && cube[22] == cube[24] && cube[10] == cube[12] && cube[22] == cube[10] ) return 1; return 0; } bool func2(){//1열 하 회전 if(cube[5] == cube[7] && cube[10] == cube[12] && cube[5] == cube[10] && cube[1] == cube[3] && cube[6] == cube[8] && cube[1] == cube[6] && cube[9] == cube[11] && cube[21] == cube[23] && cube[21] == cube[9] && cube[22] == cube[24] && cube[2] == cube[4] && cube[22] == cube[4] ) return 1; return 0; } bool func3(){//1행 좌 회전 if(cube[5] == cube[6] && cube[15] == cube[16] && cube[5] == cube[16] && cube[13] == cube[14] && cube[24] == cube[23] && cube[23] == cube[13] && cube[17] == cube[18] && cube[7] == cube[8] && cube[17] == cube[7] && cube[21] == cube[22] && cube[19] == cube[20] && cube[22] == cube[20] ) return 1; return 0; } bool func4(){//1행 우 회전 if(cube[5] == cube[6] && cube[19] == cube[20] && cube[5] == cube[20] && cube[17] == cube[18] && cube[24] == cube[23] && cube[23] == cube[17] && cube[21] == cube[22] && cube[15] == cube[16] && cube[16] == cube[22] && cube[13] == cube[14] && cube[7] == cube[8] && cube[13] == cube[7] ) return 1; return 0; } bool func5(){ // 1,2 좌 회전 if(cube[1] == cube[2] && cube[14] == cube[16] && cube[14] == cube[2] && cube[13] == cube[15] && cube[9] == cube[10] && cube[9] == cube[13] && cube[11] == cube[12] && cube[17] == cube[19] && cube[11] == cube[19] && cube[20] == cube[18] && cube[3] == cube[4] && cube[20] == cube[3] ) return 1; return 0; } bool func6(){ // 1,2 우 회전 if(cube[1] == cube[2] && cube[17] == cube[19] && cube[1] == cube[17] && cube[13] == cube[15] && cube[3] == cube[4] && cube[3] == cube[13] && cube[11] == cube[12] && cube[14] == cube[16] && cube[11] == cube[14] && cube[20] == cube[18] && cube[9] == cube[10] && cube[9] == cube[10] ) return 1; return 0; } int main(){ ios::sync_with_stdio(0); cin.tie(0); for(int i = 1; i <=24; i++){ cin>>cube[i]; } //cube 는 돌리는 수가 6개 있음 1열을 돌리나 2열을 돌리나 결과는 똑같음 if(func1() || func2() || func3() || func4()|| func5() || func6()) cout << 1 <<'\n'; else cout << 0 << '\n'; return 0; }
'알고리즘' 카테고리의 다른 글
BOJ 17360 : 팰린드롬과 관련된 수열의 개수 (0) 2023.07.30 프로그래머스 요격시스템 (0) 2023.07.30 BOJ 20183 : 골목 대장 호석 - 효율성 2 (0) 2023.07.29 BOJ 17835: 면접보는 승범이 (0) 2023.07.29 BOJ 1261 : 알고스팟 (0) 2023.07.28