본문 바로가기

Problem Solving/백준

[백준] 14891번: 톱니바퀴

내가 짠 코드

#include<iostream>
#include<stdio.h>

/* 
톱니바퀴 저장 순서
   0
  7  1
6      2
  5  3
    4
맞닿는건
1-2번의 2,6
2-3번의 2,6
3-4번의 2,6

시계방향으로 돌면 : 1
70123456
반시계 : -1
12345670
*/
using namespace std;

int main(void){
    int gear[4][8];
    int move[4] = {0,};
    int i,j,value;
    for(i=0;i<4;i++){
        scanf("%d",&value);
        for(j=7;j>=0;j--){
            gear[i][j] = value%10;
            value = value/10;
        }
    }

    // for(i=0;i<4;i++){
    //     for(j=0;j<8;j++) printf("%d",gear[i][j]);
    //     printf("\n");
    // }

    int k,gearNum, gearDir;
    int m,tmp;
    scanf("%d",&k); //회전 횟수
    for(i=0;i<k;i++){
        for(j=0;j<4;j++) move[j] = 0; //  0으로 초기화

        scanf("%d %d",&gearNum,&gearDir);
        move[gearNum-1] = gearDir;
        // printf("move : %d %d %d %d \n",move[0],move[1],move[2],move[3]);
        //맞닿은 톱니 극이 다르면 : 반대방향 회전
        //같으면 : 안움직임
        for(j=gearNum-1;j>0;j--){ //회전하는 톱니바퀴에서 왼쪽으로 먼저 검색
            if(gear[j][6] != gear[j-1][2]){ // 중심 톱니바퀴와 다른 극이면
                move[j-1] = move[j] * -1; //반대방향으로 돔
            }
        }
        for(j=gearNum-1;j<3;j++){
            if(gear[j][2] != gear[j+1][6]){
                move[j+1] = move[j] * -1; 
            }
        }
        //시계방향으로 돌면
        // 12345670
        // 반시계
        // 70123456
        for(j=0;j<4;j++){
            if(move[j]==1){ //반시계방향
                tmp = gear[j][7];
                for(m=7;m>=1;m--) gear[j][m] = gear[j][m-1];
                gear[j][0] = tmp;

            }
            else if(move[j]==-1){
                tmp = gear[j][0];
                for(m=0;m<=6;m++) gear[j][m]=gear[j][m+1];
                gear[j][7] = tmp;
            }
        }

        

   }

   int score = 0;
        score = gear[0][0]*1 + gear[1][0]*2 + gear[2][0]*4 + gear[3][0] * 8;
        printf("%d",score);
    return 0;
}

 

www.acmicpc.net/problem/14891

 

14891번: 톱니바퀴

총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴

www.acmicpc.net

 

'Problem Solving > 백준' 카테고리의 다른 글

[백준] 1009: 분산처리  (0) 2021.02.19
[백준] 1032: 명령 프롬프트  (0) 2021.02.19
[백준] 1026번: 보물  (0) 2021.02.19
[백준] 14499번: 주사위 굴리기  (0) 2021.02.01
[백준] 14503번: 로봇 청소기  (0) 2021.02.01