1. 문제

www.acmicpc.net/problem/14891

 

14891번: 톱니바퀴

첫째 줄에 1번 톱니바퀴의 상태, 둘째 줄에 2번 톱니바퀴의 상태, 셋째 줄에 3번 톱니바퀴의 상태, 넷째 줄에 4번 톱니바퀴의 상태가 주어진다. 상태는 8개의 정수로 이루어져 있고, 12시방향부터

www.acmicpc.net

2. 접근방법

 

주어진데로 톱니바퀴를 돌리면 되는 시뮬레이션 문제이다.

 

다만 인접한 톱니랑 비교해서 조건에 부합하면 연쇄적으로 돌아가는 부분이 있으니

 

그 부분은 재귀를 통해 구현하였다.

 

3. 자바 코드

package algo;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class P14891톱니바퀴 {
	static ArrayList<Integer> map[] = new ArrayList[4];
	static boolean visited[];

	public static void main(String[] args) throws Exception {
		// 0~7 0이 12시 , 2가 3시 , 6이 9시
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		
		for (int i = 0; i < 4; i++) {
			String s = br.readLine();
			map[i] = new ArrayList<Integer>();
			for (int j = 0; j < 8; j++) {
				map[i].add(Integer.parseInt(s.charAt(j)+""));
			}
		}
		int N = Integer.parseInt(br.readLine());
		for (int i = 0; i < N; i++) {
			st = new StringTokenizer(br.readLine());
			int tob = Integer.parseInt(st.nextToken()) - 1;
			int dir = Integer.parseInt(st.nextToken());

			visited = new boolean[4];
			visited[tob] = true;
			turn(tob, dir);
		}
		int result = 0;
		int score = 1;
		for (int i = 0; i < 4; i++) {
			if (map[i].get(0) == 1)
				result += score;
			score *= 2;
		}
		System.out.println(result);
	}

	static void turn(int tob, int dir) {

		if (tob - 1 >= 0 && !visited[tob - 1]) {
			if (map[tob].get(6) != map[tob - 1].get(2)) {
				visited[tob - 1] = true;
				turn(tob - 1, dir == 1 ? -1 : 1);
			}
		}
		if (tob + 1 < 4 && !visited[tob + 1]) {
			if (map[tob].get(2) != map[tob + 1].get(6)) {
				visited[tob + 1] = true;
				turn(tob + 1, dir == 1 ? -1 : 1);
			}
		}
		if (dir == 1) {
			map[tob].add(0, map[tob].remove(7));
		} else {
			map[tob].add(map[tob].remove(0));
		}
	}
}

4. 마치며

SWEX의

swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWIeV9sKkcoDFAVH

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

같은 문제였다.

+ Recent posts