설명없음
백준 14891: 톱니바퀴 [C언어], 삼성 코딩 테스트
치킨먹고싶어요
2022. 6. 13. 13:33
https://www.acmicpc.net/problem/14891
14891번: 톱니바퀴
첫째 줄에 1번 톱니바퀴의 상태, 둘째 줄에 2번 톱니바퀴의 상태, 셋째 줄에 3번 톱니바퀴의 상태, 넷째 줄에 4번 톱니바퀴의 상태가 주어진다. 상태는 8개의 정수로 이루어져 있고, 12시방향부터
www.acmicpc.net
#include <iostream>
#include <math.h>
using namespace std;
void input();
int gear[5][11];
int k;
int order[111][3];
void spin(int* arr, int way);
void solve(int num, int way);
void spread(int gear_n, int way, int rl);
int main(){
input();
for(int i = 0; i < k; i ++){
solve(order[i][0], order[i][1]);
}
int ans = 0;
for(int i = 1; i <= 4; i++) {
if (gear[i][0]) {
ans += (pow(2, i - 1));
}
}
printf("%d\n", ans);
}
void input(){
for(int j = 1; j <= 4; j++){
for(int i = 0; i < 8; i++){
scanf("%1d", &gear[j][i]);
}
}
scanf("%d", &k);
for(int i = 0; i < k; i++) scanf("%d %d", &order[i][0], &order[i][1]);
}
void spin(int* arr, int way){
int lis[11];
if (way == 1){
for(int i = 0; i < 7; i++){
lis[i + 1] = arr[i];
}
lis[0] = arr[7];
for(int i = 0; i < 8; i++) arr[i] = lis[i];
}
else{
for(int i = 1; i < 8; i++){
lis[i - 1] = arr[i];
}
lis[7] = arr[0];
for(int i = 0; i < 8; i++) arr[i] = lis[i];
}
}
void solve(int num, int way){
if (num == 1){
if (gear[1][2] != gear[2][6]) spread(num + 1, -way, 1);
spin(gear[1], way);
}
else if (num == 2){
if (gear[2][6] != gear[1][2]) spin(gear[1], -way);
if (gear[2][2] != gear[3][6]) spread(num + 1, -way, 1);
spin(gear[2], way);
}
else if (num == 3){
if (gear[3][6] != gear[2][2]) spread(num - 1, -way, -1);
if (gear[3][2] != gear[4][6]) spin(gear[4], -way);
spin(gear[3], way);
}
else{
if (gear[4][6] != gear[3][2]) spread(num - 1, -way, -1);
spin(gear[4], way);
}
}
void spread(int gear_n, int way, int rl){
if (gear_n < 1 or gear_n > 4) return;
if (rl == 1){
if (gear[gear_n][2] != gear[gear_n + 1][6]) spread(gear_n + 1, -way, rl);
spin(gear[gear_n], way);
}
else {
if (gear[gear_n][6] != gear[gear_n - 1][2]) spread(gear_n - 1, -way, rl);
spin(gear[gear_n], way);
}
}
|
cs |