[SWExpertAcademy]4013. 특이한 자석(자바)

Jihun·2022년 4월 13일
0

SWExpertAcademy

목록 보기
1/10
post-thumbnail

[SWExpertAcademy] 4013. 특이한 자석

문제

풀이

각 톱니바퀴의 top의 위치를 변경해가면 된다.

코드

import java.io.*;
import java.util.StringTokenizer;

// 회전 시 각 톱니바퀴의 top만 변경해줍니다.
public class Solution {
	//각 톱니바퀴의 탑 저장, 각 톱니바퀴의 정보 저장, 회전 가능 여부 저장
	static int top[],wheel[][],posR[];
	//방문 여부 체크
	static boolean visited[];
	//회전
	static void rotate() {
		for(int i=1;i<5;i++) {
			if(posR[i]!=0) {
				if(posR[i]==1) top[i]=(top[i]+7)%8;
				else top[i]=(top[i]+1)%8;
				posR[i]=0;
			}
			visited[i]=false;
		}
	}
	//회전 가능 여부 체크
	static void isRotate(int num,int d) {
		if(num<1||num>4)return;
		visited[num]=true;
		posR[num]=d;
		if(num-1>0&&!visited[num-1]) {
			if(wheel[num][(top[num]+6)%8]!=wheel[num-1][(top[num-1]+2)%8]) {
				isRotate(num-1,d*-1);
			}
		}
		if(num+1<5&&!visited[num+1]) {
			if(wheel[num][(top[num]+2)%8]!=wheel[num+1][(top[num+1]+6)%8]) {
				isRotate(num+1,d*-1);
			}
		}
	}
	static int getAnswer() {
		int result=0,point=1;
		for(int i=1;i<5;i++) {
			result+=wheel[i][top[i]]*point;
			point*=2;
		}
		return result;
	}
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int T=Integer.parseInt(br.readLine());
		for(int t=1;t<=T;t++) {
			top=new int[5];
			int k=Integer.parseInt(br.readLine());
			wheel = new int[5][8];
			posR=new int[5];
			visited=new boolean[5];
			for(int i=1;i<5;i++) {
				StringTokenizer st=new StringTokenizer(br.readLine());
				for(int j=0;j<8;j++) {
					wheel[i][j]=Integer.parseInt(st.nextToken());
				}
			}
			for(int i=0;i<k;i++) {
				StringTokenizer st=new StringTokenizer(br.readLine());
				isRotate(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()));
				rotate();
			}
			System.out.println("#"+t+" "+getAnswer());
		}
	}
}
profile
slow and steady

0개의 댓글