[문제링크]

 

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);
	}
}

결과 화면

+ Recent posts