백준 14981번: 톱니바퀴

danbibibi·2022년 10월 9일
0

문제

문제 바로가기> 백준 14981번: 톱니바퀴

풀이

문제의 설명대로 구현해주면 되는 간단한 문제였다. 톱니바퀴 회전 시 문자열의 substr을 이용해주었다 :)

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

string gear[4]; // N극은 0, S극은 1
int rotatenum[4];

void solution(int num, int dir) {
	
	memset(rotatenum, 0, sizeof(rotatenum));
	
	// 1. 톱니 바퀴들의 회전 방향 정하기 
	rotatenum[num] = dir;
	for (int i = num + 1; i < 4; i++) {
		if (rotatenum[i - 1] != 0 && gear[i - 1][2] != gear[i][6]) {
			if (rotatenum[i - 1] == -1) rotatenum[i] = 1;
			else if (rotatenum[i - 1] == 1) rotatenum[i] = -1;
		}
	}
	for (int i = num - 1; i >= 0; i--) {
		if (rotatenum[i + 1] != 0 && gear[i + 1][6] != gear[i][2]) {
			if (rotatenum[i + 1] == -1) rotatenum[i] = 1;
			else if (rotatenum[i + 1] == 1) rotatenum[i] = -1;
		}
	}

	// 2. 톱니 바퀴 회전
	for (int i = 0; i < 4; i++) {
		if (rotatenum[i] == -1) { // 반시계방향 회전
			string s = gear[i].substr(1);
			s += gear[i][0];
			gear[i] = s;
		}
		else if (rotatenum[i] == 1) { // 시계방향 회전
			string s = gear[i].substr(0, gear[i].size() - 1);
			s = gear[i][gear[i].size() - 1] + s;
			gear[i] = s;
		}
	}
}

void output() { // 총 K번 회전시킨 이후에 네 톱니바퀴의 점수의 합을 출력
	int pow2[] = { 1, 2, 4, 8 };
	int ans = 0;
	for (int i = 0; i < 4; i++) ans += (gear[i][0] - '0') * pow2[i]; // char to int
	cout << ans;
}

int main() {
	ios_base::sync_with_stdio(0); cin.tie(0);
	for (int i = 0; i < 4; i++) cin >> gear[i];
	int k, num, dir;  cin >> k;
	while (k--) {
		cin >> num >> dir;
		solution(num-1, dir);
	}
	output();
}
profile
블로그 이전) https://danbibibi.tistory.com

0개의 댓글