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);
}
}
'알고리즘 문제 풀이 > BOJ 골드' 카테고리의 다른 글
[백준] 21610 - 마법사 상어와 비바라기 (0) | 2021.10.25 |
---|---|
[백준] 1339 - 단어수학 (0) | 2021.10.10 |
[백준] 14938 - 서강그라운드 (0) | 2021.10.03 |
[백준] 16919 - 봄버맨 2 (0) | 2021.09.25 |
[백준] 4256 - 트리 (0) | 2021.09.25 |
[백준] 20056 - 마법사 상어와 파이어볼 (0) | 2021.09.07 |
[백준] 6198 - 옥상 정원 꾸미기 (0) | 2021.08.27 |