알고리즘 문제 풀이/BOJ 골드
[백준] 14891 - 톱니바퀴
natonato
2021. 9. 27. 22:54
14891번: 톱니바퀴
총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴
www.acmicpc.net
0. 구현문제. 요구사항을 잘 구현한다
1. 톱니바퀴의 연쇄 회전 : 회전 여부를 저장하는 boolean 배열과 재귀로 진행
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main{
static boolean[][] wheel;
static boolean[] isTurn;
public static void main(String[] args)throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
//s극 : true, n극 : false
wheel = new boolean[4][8];
for (int i = 0; i < 4; i++) {
String s = br.readLine();
for (int j = 0; j < 8; j++) {
wheel[i][j]=s.charAt(j)-'0'==1?true:false;
}
}
int n = pint(br.readLine());
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine(), " ");
int num = pint(st.nextToken())-1;
int dir = pint(st.nextToken());
isTurn=new boolean[4];
turn(num,dir);//1:시계, -1:반시계
}
int score=0;
for (int i = 0; i < 4; i++) {
if(wheel[i][0])score+=1<<i;
}
System.out.println(score);
}
static void turn(int n, int dir) {
isTurn[n]=true;
if(n<3 && !isTurn[n+1] && wheel[n][2]!=wheel[n+1][6])turn(n+1, dir==1?-1:1);
if(n>0 && !isTurn[n-1] && wheel[n][6]!=wheel[n-1][2])turn(n-1, dir==1?-1:1);
if(dir==1) {
boolean tmp = wheel[n][7];
for (int i = 7; i > 0; i--) {
wheel[n][i] = wheel[n][i-1];
}wheel[n][0]=tmp;
}
else {
boolean tmp = wheel[n][0];
for (int i = 0; i < 7; i++) {
wheel[n][i] = wheel[n][i+1];
}wheel[n][7]=tmp;
}
}
static int pint(String s) {
return Integer.parseInt(s);
}
}