코딩테스트/C++

[ 백준 BOJ ] 15662번 - 톱니바퀴(2) (C++)

최-코드 2025. 6. 11. 11:22

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

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int T;
vector<string> gear;
int K;
vector<pair<int,int>> input;

void moveT(int i, int dir){
    if(dir==-1){
        string tmp = gear[i].substr(1);
        tmp+=gear[i][0];
        
        gear[i] = tmp;
    } else{
        string tmp = "";
        tmp+=gear[i][7];
        tmp+=gear[i].substr(0, 7);
        
        gear[i] = tmp;
    }
}

void next(int a, int b, int dir){
    if(dir!=1){
        if(a-1>=0){
            if(gear[a][6]!=gear[a-1][2]){
                next(a-1, -b, -1);
            }
        }
    }
    if(dir!=-1){
        if(a+1<T){
            if(gear[a][2]!=gear[a+1][6]){
                next(a+1, -b, 1);
            }
        }
    }
    moveT(a,b);
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    
    cin>>T;
    for(int i = 0; i<T; i++){
        string str;
        cin>>str;
        
        gear.push_back(str);
    }
    
    cin>>K;
    for(int i = 0; i<K; i++){
        int a,b;
        cin>>a>>b;
        
        next(a-1,b, 0);
    }
    
    int answer = 0;
    
    for(int i = 0; i<T; i++){
        if(gear[i][0]=='1') answer++;
    }
    
    cout<<answer<<endl;
    
    return 0;
}