내가 짠 코드
#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;
}
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 |