백준/삼성기출
톱니바퀴
연구하는개발자
2021. 4. 5. 16:22
728x90
14891번: 톱니바퀴
총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴
www.acmicpc.net
package Samsung;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.StringTokenizer;
public class GearWheel {
// n = Integer.parseInt(st.nextToken());
// l = Integer.parseInt(st.nextToken());
static LinkedList<LinkedList<Integer>>gear = new LinkedList<LinkedList<Integer>>();
static int count=0;
static void move( int n,int dir){
if(dir ==1){
LinkedList<Integer>ngear = new LinkedList<Integer>();
ngear = gear.get(n);
int num = ngear.peekLast();
ngear.pollLast();
ngear.add(0, num);
}
else if(dir==-1){
LinkedList<Integer>ngear = new LinkedList<Integer>();
ngear= gear.get(n);
int num = ngear.peekFirst();
ngear.pollFirst();
ngear.add(7, num);
}
}
static void simulateprev(int gearnum, int dir){
int prev = gearnum-1;
if(prev<1){return;}
else{
if(gear.get(prev-1).get(2)!=gear.get(gearnum-1).get(6)){
simulateprev(prev,-dir);
move(prev-1,-dir);
}
}
return;
}
static void simulatenext(int gearnum, int dir){
int next = gearnum+1;
if(next>4){return;}
else{
if(gear.get(next-1).get(6)!=gear.get(gearnum-1).get(2)){
simulatenext(next,-dir);
move(next-1,-dir);
}
}
return;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int k;
for (int i = 0; i < 4; i++) {
gear.add(i, new LinkedList<Integer>());
String str = br.readLine();
for(int j=0; j<str.length(); j++){
if(i==0){
gear.get(0).add(str.charAt(j)-'0');
}else if(i==1){
gear.get(1).add(str.charAt(j)-'0');
}else if(i==2){
gear.get(2).add(str.charAt(j)-'0');
}else if(i==3){
gear.get(3).add(str.charAt(j)-'0');
}
}
}
k = Integer.parseInt(br.readLine());
for(int j=0; j<k; j++){
StringTokenizer st = new StringTokenizer(br.readLine());
int gearnum = Integer.parseInt(st.nextToken());
int dir = Integer.parseInt(st.nextToken());
simulateprev(gearnum,dir);
simulatenext(gearnum,dir);
move(gearnum-1,dir);
}
for(int i=0; i<4; i++){
if(gear.get(i).peekFirst()==1){
if(i==0){count+=1;}
else if(i==1){count+=2;}
else if(i==2){count+=4;}
else{count+=8;}
}
}
System.out.println(count);
return;
}
}