16939번 2*2*2 큐브

동도리동·2021년 9월 30일
0

코딩테스트

목록 보기
47/76

이번 문제는.. 좀 그렇다. 일일이 다 구현해야 한다니...
헷갈려 죽는줄 알았다.

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

bool test(vector<int> cube) {
	bool ch = true;
	for (int i = 1; i < 24; i += 4) {
		for (int j = 0; j < 3; j++) {
			if (cube[i + j] != cube[i + j + 1]) return false;
		}
	}
	return true;//true면 정답!
}
bool u(vector<int> cube,int i) {
	bool ch = false;
	//작업
	if (i == 0) {//왼쪽
		int temp = cube[13];
		cube[13] = cube[5];
		cube[5] = cube[17];
		cube[17] = cube[21];
		cube[21] = temp;
		temp = cube[14];
		cube[14] = cube[6];
		cube[6] = cube[18];
		cube[18] = cube[22];
		cube[22] = temp;
	}
	else {
		int temp = cube[17];
		cube[17] = cube[5];
		cube[5] = cube[13];
		cube[13] = cube[21];
		cube[13] = temp;
		temp = cube[18];
		cube[18] = cube[6];
		cube[6] = cube[14];
		cube[14] = cube[22];
		cube[22] = temp;
	}
	return test(cube);
}
bool d(vector<int> cube, int i) {
	bool ch = false;
	//작업
	if (i == 0) {
		int temp = cube[15];
		cube[15] = cube[7];
		cube[7] = cube[19];
		cube[19] = cube[23];
		cube[23] = temp;
		temp = cube[16];
		cube[16] = cube[8];
		cube[8] = cube[20];
		cube[20] = cube[24];
		cube[24] = temp;
	}
	else {
		int temp = cube[19];
		cube[19] = cube[7];
		cube[7] = cube[15];
		cube[15] = cube[23];
		cube[23] = temp;
		temp = cube[20];
		cube[20] = cube[8];
		cube[8] = cube[16];
		cube[16] = cube[24];
		cube[24] = temp;
	}
	return test(cube);
}
bool f(vector<int> cube, int i) {
	bool ch = false;
	//작업
	if (i == 0) {
		int temp = cube[17];
		cube[17] = cube[10];
		cube[10] = cube[16];
		cube[16] = cube[3];
		cube[3] = temp;
		temp = cube[19];
		cube[19] = cube[9];
		cube[9] = cube[14];
		cube[14] = cube[4];
		cube[4] = temp;
	}
	else {
		int temp = cube[17];
		cube[17] = cube[3];
		cube[3] = cube[16];
		cube[16] = cube[10];
		cube[10] = temp;
		temp = cube[19];
		cube[19] = cube[4];
		cube[4] = cube[14];
		cube[14] = cube[9];
		cube[9] = temp;

	}
	return test(cube);
}
bool r(vector<int> cube, int i) {
	bool ch = false;
	//작업
	if (i == 0) {
		int temp = cube[18];
		cube[18] = cube[12];
		cube[12] = cube[15];
		cube[15] = cube[1];
		cube[1] = temp;
		temp = cube[20];
		cube[20] = cube[11];
		cube[11] = cube[13];
		cube[13] = cube[2];
		cube[2] = temp;
	}
	else {
		int temp = cube[18];
		cube[18] = cube[1];
		cube[1] = cube[15];
		cube[15] = cube[12];
		cube[12] = temp;
		temp = cube[20];
		cube[20] = cube[2];
		cube[2] = cube[13];
		cube[13] = cube[11];
		cube[11] = temp;
	}
	return test(cube);
}
bool sl(vector<int> cube, int i) {
	bool ch = false;
	//작업
	if (i == 0) {
		int temp = cube[5];
		cube[5] = cube[9];
		cube[9] = cube[24];
		cube[24] = cube[1];
		cube[1] = temp;
		temp = cube[7];
		cube[7] = cube[11];
		cube[11] = cube[22];
		cube[22] = cube[3];
		cube[3] = temp;
	}
	else {
		int temp = cube[5];
		cube[5] = cube[1];
		cube[1] = cube[24];
		cube[24] = cube[9];
		cube[9] = temp;
		temp = cube[7];
		cube[7] = cube[3];
		cube[3] = cube[22];
		cube[22] = cube[11];
		cube[11] = temp;

	}
	return test(cube);
}
bool sr(vector<int> cube, int i) {
	bool ch = false;
	//작업
	if (i == 0) {
		int temp = cube[6];
		cube[6] = cube[2];
		cube[2] = cube[23];
		cube[23] = cube[10];
		cube[10] = temp;
		temp = cube[8];
		cube[8] = cube[4];
		cube[4] = cube[21];
		cube[21] = cube[12];
		cube[12] = temp;
		
	}
	else {
		int temp = cube[6];
		cube[6] = cube[10];
		cube[10] = cube[23];
		cube[23] = cube[2];
		cube[2] = temp;
		temp = cube[8];
		cube[8] = cube[12];
		cube[12] = cube[21];
		cube[21] = cube[4];
		cube[4] = temp;
		
	}

	return test(cube);
}
int main() {
	//freopen("in1.txt", "rt", stdin);
	vector<int> cube(25);
	for (int i = 1; i <= 24; i++) cin >> cube[i];
	for (int i = 0; i <= 1; i++) {
		if (u(cube, i)) {
			cout << 1 << '\n';
			return 0;
		}
	}
	for (int i = 0; i <= 1; i++) {
		if (d(cube, i)) {
			cout << 1 << '\n';
			return 0;
		}
	}
	for (int i = 0; i <= 1; i++) {
		if (f(cube, i)) {
			cout << 1 << '\n';
			return 0;
		}
	}
	for (int i = 0; i <= 1; i++) {
		if (r(cube, i)) {
			cout << 1 << '\n';
			return 0;
		}
	}
	for (int i = 0; i <= 1; i++) {
		if (sl(cube, i)) {
			cout << 1 << '\n';
			return 0;
		}
	}
	for (int i = 0; i <= 1; i++) {
		if (sr(cube, i)) {
			cout << 1 << '\n';
			return 0;
		}
	}
	cout << 0 << '\n';
	return 0;
}
profile
긍정코딩세상

0개의 댓글

관련 채용 정보