boj14891 톱니바퀴 c++

2023. 7. 25. 17:26알고리즘

코드

#include <iostream>
#include <deque>
#include <string>
#include <vector>
#include <cmath>
using namespace std;

void rotate(deque<int> &v,  int dir) {
	int f;
	if (dir == 1) {
		f = v.back();
		v.pop_back();
		v.push_front(f);
	}
	else if (dir == -1) {
		f = v.front();
		v.pop_front();
		v.push_back(f);
	}
}

int cal(vector<deque<int>> v) {
	int total = 0;
	for (int i = 0;i < 4;i++) {
		if (v[i + 1][0] == 1) {
			total += pow(2, i);
		}
	}
	return total;
}

int main(void) {
	// cin.tie(0);
	// ios::sync_with_stdio(false);
	int K;
	vector<string> s(5);
	vector<deque<int>> d(5);
	vector<deque<int>> t(5);
	for (int i = 1;i <= 4;i++) {
		cin >> s[i];
	}
	for (int i = 1;i <= 4;i++) {
		for (int j = 0;j < 8;j++) {
			d[i].push_back(s[i][j]-'0');
		}
	}
	cin >> K;
	while (K--) {
		int x, y, ty;
		cin >> x >> y;
		for (int i = 1;i <= 4;i++) {
			t[i] = d[i];
		}
		int st = x;
		ty = y;
		rotate(d[x], y);
		while (st < 4) {
			if (t[st][2] != t[st + 1][6]) {
				y = y * (-1);
				rotate(d[st + 1], y);
				st++;
			}
			else {
				break;
			}
		}
		st = x;
		y = ty;
		while (st > 1) {
			if (t[st][6] != t[st - 1][2]) {
				y = y * (-1);
				rotate(d[st - 1], y);
				st--;
			}
			else {
				break;
			}
		}

	}
	cout << cal(d) << endl;
		return 0;
	}

 

문제 설명

시뮬레이션 문제였다. deque를 사용했다. deque는 앞, 뒤로 pop 이 가능한 자료구조이다. 

 

구현 이슈

2, 6을 비교해야한다. 

 

'알고리즘' 카테고리의 다른 글

백준 15686 치킨배달 c++  (2) 2023.07.27
백준 15683 c++  (0) 2023.07.26
백준 14502번 - 연구소 c++ 풀이  (0) 2023.07.22
백준 2410 C++  (0) 2020.04.03
백준 2841 C++  (0) 2020.03.30