ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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;
    }
Designed by Tistory.