톱니바퀴를 회전시키는 문제이다.
주요조건
1. 맞닿아있는 극이 서로 같으면 안움직인다.
2. 맞닿아있는 극이 서로 같으면 서로 반대방향으로 돌아간다.
더보기
더보기
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static int ans;
public static int[][] Gear = new int[4][8];
public static boolean[] Check_Gear;
public static void InputData() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stk;
for(int i = 0; i < 4; i++){
String str = br.readLine();
for(int j = 0; j < 8; j++){
Gear[i][j] = Integer.parseInt(String.valueOf(str.charAt(j)));
}
}
stk = new StringTokenizer(br.readLine(), " ");
int k = Integer.parseInt(stk.nextToken());
while(k > 0){
stk = new StringTokenizer(br.readLine(), " ");
int number = Integer.parseInt(stk.nextToken());
boolean Clockwise = Integer.parseInt(stk.nextToken()) == 1;
Check_Gear = new boolean[4];
ClockMove(number - 1, Clockwise);
k--;
}
for(int i = 0, point = 1; i < 4; i++, point *= 2){
if(Gear[i][0] == 1)
ans += point;
}
br.close();
} // 데이터 입력과 동시에 진행
public static void ClockMove(int number, boolean clockwise) {
Check_Gear[number] = true;
if(number < 3 && ( Gear[number][2] != Gear[number + 1][6] ) && !Check_Gear[number + 1]){
ClockMove(number + 1, !clockwise);
}// 톱니바퀴 우측 체크
if(number > 0 && ( Gear[number][6] != Gear[number - 1][2] )&& !Check_Gear[number - 1]){
ClockMove(number - 1, !clockwise);
}// 톱니바퀴 좌측 체크
if(clockwise){
int tmp = Gear[number][7];
for(int i = 7; i > 0; i--){
Gear[number][i] = Gear[number][i - 1];
}
Gear[number][0] = tmp;
}else{
int tmp = Gear[number][0];
for(int i = 0; i < 7; i++){
Gear[number][i] = Gear[number][i + 1];
}
Gear[number][7] = tmp;
}
}
public static void Print_result() throws IOException {
BufferedWriter bw =new BufferedWriter(new OutputStreamWriter(System.out));
bw.write(String.valueOf(ans));
bw.flush(); bw.close();
}
// 결과 출력
public static void main(String[] args) throws IOException{
InputData();
Print_result();
}
}