YWC
백준/14891/톱니바퀴/C 본문
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 |