YWC

백준/14891/톱니바퀴/C 본문

공부/코테_문제풀이

백준/14891/톱니바퀴/C

YWC 2023. 4. 8. 15:47

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

 

14891번: 톱니바퀴

첫째 줄에 1번 톱니바퀴의 상태, 둘째 줄에 2번 톱니바퀴의 상태, 셋째 줄에 3번 톱니바퀴의 상태, 넷째 줄에 4번 톱니바퀴의 상태가 주어진다. 상태는 8개의 정수로 이루어져 있고, 12시방향부터

www.acmicpc.net


1) c

#include <stdio.h>
#include <stdlib.h>
#pragma warning(disable:4996)

int arr[6][9];
int rotation[5];
int k, number, dir;
//2-6 , 2-6, 2-6, 

void clock_rotation(int x) {
	int t = arr[x][7];
	for (int i = 7; i > 0; i--) {
		arr[x][i] = arr[x][i - 1];
	}
	arr[x][0] = t;
}

void c_clock_rotation(int x) {
	int t = arr[x][0];
	for (int i = 0; i < 7; i++) {
		arr[x][i] = arr[x][i + 1];
	}
	arr[x][7] = t;
}

void move(int x) {
	int cnt = rotation[x];
	if (cnt == 0) { return; }

	else if (cnt > 0) {
		for (int i = 0; i < cnt; i++) { clock_rotation(x); }
	}
	else if (cnt < 0) {
		cnt = 0 - cnt;
		for (int i = 0; i < cnt; i++) { c_clock_rotation(x); }
	}
}

void check_saw(int here, int direction) {
	int d = direction;
	rotation[here] += d; d = 0 - d;

	for (int i = here; i > 1; i--) {
		if (arr[i][6] == arr[i - 1][2]) { break; }
		rotation[i - 1] = d; d = 0 - d;
	}

	d = 0 - direction;
	for (int i = here; i < 4; i++) {
		if (arr[i][2] == arr[i+1][6]) { break; }
		rotation[i + 1] = d; d = 0 - d;
	}
}

void printmap() {
	printf("\nprintmap!\n");
	for (int i = 1; i < 5; i++) {
		for (int j = 0; j < 8; j++) {
			printf("%d ", arr[i][j]);
		}printf("\n");
	}printf("\n");
}

int main(void) {

	for (int i = 1; i <= 4; i++) {
		for (int j = 0; j < 8; j++) {
			scanf("%1d", &arr[i][j]);
		}
	}
	scanf("%d", &k);
	for (int i = 0; i < k; i++) {
		scanf("%d %d", &number, &dir);
		check_saw(number, dir);
		for (int j = 1; j < 5; j++) {
			//printf("%d ", rotation[j]);
			move(j);
			rotation[j] = 0;
			//printmap();
		}
	}


	printf("%d", arr[1][0] * 1 + arr[2][0] * 2 + arr[3][0] * 4 + arr[4][0] * 8);

	return 0;

}

 

'공부 > 코테_문제풀이' 카테고리의 다른 글

백준/5073/삼각형과 세 변/C  (0) 2023.04.14
백준/23971/ZOAC 4/C  (0) 2023.04.14
백준/14889/스타트와 링크/C  (0) 2023.04.08
백준/14888/연산자 끼워넣기/C  (0) 2023.04.07
백준/13458/시험감독/C  (0) 2023.04.07