[구현] 백준 14891 톱니바퀴

2021. 2. 17. 09:59알고리즘 문제분석

www.acmicpc.net/problem/14891

 

 

 

 

 

수행기간 : 3시간

이 문제는 사실 풀었어도 올리지 않으려고 했다... 빡구현으로 푼 첫문제였고, 그 만큼 쓸때없는 코드들도 많고 그냥 노다가 한 느낌이 났기 때문에 ㅜㅜ 그래도 내가 원래 알고리즘을 잘 푸는 편도 아니였고, 차차 나아지면 되니까 나~~중에 실력이 늘었을 때, 그 때 지금의 코드를 보면 어떨까 싶어 올린다.

#include <iostream>
#include <math.h>
#include <vector>
#include <stdio.h>
using namespace std;

int a[8], b[8], c[8], d[8], k;
int num, dir;

void right_rotate(int arr[], int first, int end) { //시계 방향
	int last = arr[end];
	for (int i = end; i > first; i--) {
		arr[i] = arr[i - 1];
	}
	arr[first] = last;
}
void left_rotate(int arr[], int first, int end) { //반시계방향
	int front = arr[first];
	for (int i = first; i < end; i++) {
		arr[i] = arr[i + 1];
	}
	arr[end] = front;
}

int value() {
	if (a[0] == 1 && b[0] == 1 && c[0] == 1 && d[0] == 1) {
		return 15;
	}
	else if (a[0] == 1 && b[0] == 1 && c[0] == 1 && d[0] == 0) {
		return 7;
	}
	else if (a[0] == 1 && b[0] == 1 && c[0] == 0 && d[0] == 1) {
		return 11;
	}
	else if (a[0] == 1 && b[0] == 0 && c[0] == 1 && d[0] == 1) {
		return 13;
	}
	else if (a[0] == 0 && b[0] == 1 && c[0] == 1 && d[0] == 1) {
		return 14;
	}
	else if (a[0] == 0 && b[0] == 0 && c[0] == 1 && d[0] == 1) {
		return 12;
	}
	else if (a[0] == 0 && b[0] == 1 && c[0] == 0 && d[0] == 1) {
		return 10;
	}
	else if (a[0] == 1 && b[0] == 0 && c[0] == 0 && d[0] == 1) {
		return 9;
	}
	else if (a[0] == 1 && b[0] == 1 && c[0] == 0 && d[0] == 0) {
		return 3;
	}
	else if (a[0] == 1 && b[0] == 0 && c[0] == 1 && d[0] == 0) {
		return 5;
	}
	else if (a[0] == 0 && b[0] == 1 && c[0] == 1 && d[0] == 0) {
		return 6;
	}
	else if (a[0] == 0 && b[0] == 0 && c[0] == 0 && d[0] == 1) {
		return 8;
	}
	else if (a[0] == 0 && b[0] == 0 && c[0] == 1 && d[0] == 0) {
		return 4;
	}
	else if (a[0] == 0 && b[0] == 1 && c[0] == 0 && d[0] == 0) {
		return 2;
	}
	else if (a[0] == 1 && b[0] == 0 && c[0] == 0 && d[0] == 0) {
		return 1;
	}
	else if (a[0] == 0 && b[0] == 0 && c[0] == 0 && d[0] == 0) {
		return 0;
	}

}


void calculate(int x, int y) {
	if (x == 1) {
		if (y == 1) {
			if (a[2] == b[6]) {
				right_rotate(a, 0, 7);
			}
			else if (a[2] != b[6]) {
				if (b[2] == c[6]) {
					right_rotate(a, 0, 7);
					left_rotate(b, 0, 7);
				}
				else if (b[2] != c[6]) {
					if (c[2] == d[6]) {
						right_rotate(a, 0, 7);
						left_rotate(b, 0, 7);
						right_rotate(c, 0, 7);
					}
					else if (c[2] != d[6]) {
						right_rotate(a, 0, 7);
						left_rotate(b, 0, 7);
						right_rotate(c, 0, 7);
						left_rotate(d, 0, 7);
					}
				}
			}
		}
		else if (y == 2) {
			if (b[6] == a[2] && b[2] == c[6]) {
				right_rotate(b, 0, 7);
			}
			else if (b[6] != a[2] && b[2] == c[6]) {
				right_rotate(b, 0, 7);
				left_rotate(a, 0, 7);
			}
			else if (b[6] == a[2] && b[2] != c[6]) {
				if (c[2] == d[6]) {
					right_rotate(b, 0, 7);
					left_rotate(c, 0, 7);
				}
				else if (c[2] != d[6]) {
					right_rotate(b, 0, 7);
					left_rotate(c, 0, 7);
					right_rotate(d, 0, 7);
				}
			}
			else if (b[6] != a[2] && b[2] != c[6]) {
				if (c[2] == d[6]) {
					left_rotate(a, 0, 7);
					right_rotate(b, 0, 7);
					left_rotate(c, 0, 7);
				}
				else if (c[2] != d[6]) {
					left_rotate(a, 0, 7);
					right_rotate(b, 0, 7);
					left_rotate(c, 0, 7);
					right_rotate(d, 0, 7);
				}
			}
		}
		else if (y == 3) {
			if (d[6] == c[2] && c[2] == b[6]) {
				right_rotate(c, 0, 7);
			}
			else if (d[6] != c[2] && c[2] == b[6]) {
				right_rotate(c, 0, 7);
				left_rotate(d, 0, 7);
			}
			else if (d[6] == c[2] && b[2] != c[6]) {
				if (a[2] == b[6]) {
					right_rotate(c, 0, 7);
					left_rotate(b, 0, 7);
				}
				else if (b[2] != a[6]) {
					right_rotate(c, 0, 7);
					left_rotate(b, 0, 7);
					right_rotate(a, 0, 7);
				}
			}
			else if (d[6] != c[2] && b[2] != c[6]) {
				if (a[2] == b[6]) {
					left_rotate(b, 0, 7);
					right_rotate(c, 0, 7);
					left_rotate(d, 0, 7);
				}
				else if (a[2] != b[6]) {
					left_rotate(d, 0, 7);
					right_rotate(c, 0, 7);
					left_rotate(b, 0, 7);
					right_rotate(a, 0, 7);
				}
			}
		}
		else if (y == 4) {
			if (d[6] == c[2]) {
				right_rotate(d, 0, 7);
			}
			else if (d[6] != c[2]) {
				if (c[6] == b[2]) {
					right_rotate(d, 0, 7);
					left_rotate(c, 0, 7);
				}
				else if (c[6] != b[2]) {
					if (b[6] == a[2]) {
						right_rotate(d, 0, 7);
						left_rotate(c, 0, 7);
						right_rotate(b, 0, 7);
					}
					else if (b[6] != a[2]) {
						right_rotate(d, 0, 7);
						left_rotate(c, 0, 7);
						right_rotate(b, 0, 7);
						left_rotate(a, 0, 7);
					}
				}
			}
		}
	}
	else if (x == -1) {
		if (y == 1) {
			if (a[2] == b[6]) {
				left_rotate(a, 0, 7);
			}
			else if (a[2] != b[6]) {
				if (b[2] == c[6]) {
					left_rotate(a, 0, 7);
					right_rotate(b, 0, 7);
				}
				else if (b[2] != c[6]) {
					if (c[2] == d[6]) {
						left_rotate(a, 0, 7);
						right_rotate(b, 0, 7);
						left_rotate(c, 0, 7);
					}
					else if (c[2] != d[6]) {
						left_rotate(a, 0, 7);
						right_rotate(b, 0, 7);
						left_rotate(c, 0, 7);
						left_rotate(d, 0, 7);
					}
				}
			}
		}
		else if (y == 2) {
			if (b[6] == a[2] && b[2] == c[6]) {
				left_rotate(b, 0, 7);
			}
			else if (b[6] != a[2] && b[2] == c[6]) {
				left_rotate(b, 0, 7);
				right_rotate(a, 0, 7);
			}
			else if (b[6] == a[2] && b[2] != c[6]) {
				if (c[2] == d[6]) {
					left_rotate(b, 0, 7);
					right_rotate(c, 0, 7);
				}
				else if (c[2] != d[6]) {
					left_rotate(b, 0, 7);
					right_rotate(c, 0, 7);
					left_rotate(d, 0, 7);
				}
			}
			else if (b[6] != a[2] && b[2] != c[6]) {
				if (c[2] == d[6]) {
					right_rotate(a, 0, 7);
					left_rotate(b, 0, 7);
					right_rotate(c, 0, 7);
				}
				else if (c[2] != d[6]) {
					right_rotate(a, 0, 7);
					left_rotate(b, 0, 7);
					right_rotate(c, 0, 7);
					left_rotate(d, 0, 7);
				}
			}
		}
		else if (y == 3) {
			if (d[6] == c[2] && c[2] == b[6]) {
				left_rotate(c, 0, 7);
			}
			else if (d[6] != c[2] && c[2] == b[6]) {
				left_rotate(c, 0, 7);
				right_rotate(d, 0, 7);
			}
			else if (d[6] == c[2] && b[2] != c[6]) {
				if (a[2] == b[6]) {
					left_rotate(c, 0, 7);
					right_rotate(b, 0, 7);
				}
				else if (b[2] != a[6]) {
					left_rotate(c, 0, 7);
					right_rotate(b, 0, 7);
					left_rotate(a, 0, 7);
				}
			}
			else if (d[6] != c[2] && b[2] != c[6]) {
				if (a[2] == b[6]) {
					right_rotate(b, 0, 7);
					left_rotate(c, 0, 7);
					right_rotate(d, 0, 7);
				}
				else if (a[2] != b[6]) {
					right_rotate(d, 0, 7);
					left_rotate(c, 0, 7);
					right_rotate(b, 0, 7);
					left_rotate(a, 0, 7);
				}
			}
		}
		else if (y == 4) {
			if (d[6] == c[2]) {
				left_rotate(d, 0, 7);
			}
			else if (d[6] != c[2]) {
				if (c[6] == b[2]) {
					left_rotate(d, 0, 7);
					right_rotate(c, 0, 7);
				}
				else if (c[6] != b[2]) {
					if (b[6] == a[2]) {
						left_rotate(d, 0, 7);
						right_rotate(c, 0, 7);
						left_rotate(b, 0, 7);
					}
					else if (b[6] != a[2]) {
						left_rotate(d, 0, 7);
						right_rotate(c, 0, 7);
						left_rotate(b, 0, 7);
						right_rotate(a, 0, 7);
					}
				}
			}
		}
	}
}


int main() {
	for (int i = 0;i < 8;i++) {
		scanf_s("%1d", &a[i]);
	}
	for (int i = 0;i < 8;i++) {
		scanf_s("%1d", &b[i]);
	}
	for (int i = 0;i < 8;i++) {
		scanf_s("%1d", &c[i]);
	}
	for (int i = 0;i < 8;i++) {
		scanf_s("%1d", &d[i]);
	}
	cin >> k;
	for (int i = 0;i < k;i++) {
		cin >> num >> dir;
		calculate(dir, num);
	}

	cout << value();
}