설명없음

백준 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 > 4return;
    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