Muscardinus

톱니바퀴 본문

알고리즘 문제/[삼성 SW 역량 테스트 기출 문제]

톱니바퀴

Muscardinus 2020. 8. 27. 16:44
728x90

https://www.acmicpc.net/problem/14891

 

14891번: 톱니바퀴

총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴

www.acmicpc.net

#include <iostream>
#include <cstring>
using namespace std;

int n;
string gear[4];

int main() {
	ios_base::sync_with_stdio(false);
	for (int i = 0; i < 4; ++i) {
		cin >> gear[i]; //입력 값 String
	}
	cin >> n;
	int target, cmd;
	for (int i = 0; i < n; i++) {
		cin >> target >> cmd;
		target--;
		int move_cmd[4] = { 0, };
		move_cmd[target] = cmd;
		for (int left = target - 1; left >= 0; left--) { //기준점 왼쪽 확인
			int right = left + 1;
			if (gear[left][2] == gear[right][6]) break;
			else move_cmd[left] = move_cmd[right] * -1;
		}
		for (int right = target + 1; right <= 3; right++) { //기준점 오른쪽 확인
			int left = right - 1;
			if (gear[left][2] == gear[right][6]) break;
			else move_cmd[right] = move_cmd[left] * -1;
		}
		for (int j = 0; j < 4; j++) {
			if (move_cmd[j] == 1) {
				char temp = gear[j][7];
				for (int k = 7; k >= 1; k--) {
					gear[j][k] = gear[j][k - 1];
				}
				gear[j][0] = temp;
			}
			if (move_cmd[j] == -1) {
				char temp = gear[j][0];
				for (int k = 0; k < 7; k++) {
					gear[j][k] = gear[j][k + 1];
				}
				gear[j][7] = temp;
			}
		}
	}
	int ret = 0;
	for (int i = 0; i < 4; ++i) {
		if (gear[i][0] == '1') {
			ret += (1 << i);
		}
	}
	cout << ret;
	return 0;
}
728x90

'알고리즘 문제 > [삼성 SW 역량 테스트 기출 문제]' 카테고리의 다른 글

사다리 조작  (0) 2020.08.29
감시  (0) 2020.08.28
경사로  (0) 2020.08.26
스타트와 링크  (0) 2020.08.25
로봇청소기  (0) 2020.08.24
Comments