1. 문제
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
같은 문제였다.
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준] 14698 전생했더니 슬라임 연구자였던 건에 대하여 (Hard) (0) | 2020.11.05 |
---|---|
[백준] 2239 스도쿠 (0) | 2020.11.04 |
[백준] 19238 스타트 택시 (0) | 2020.10.31 |
[백준] 1445 일요일 아침의 데이트 (0) | 2020.10.29 |
[백준] 3691 컴퓨터조립 (0) | 2020.10.29 |