자르비 왕국
[SW Academy] 4014 특이한 자석 - JAVA 본문
1. 문제 유형 : 구현
자석이 회전할 때, 자석의 상태를 저장하는 배열을 회전하는 대신 각 자석의 빨간색 화살표의 위치를 저장한 배열을 생성하고, 빨간색 화살표의 위치를 변경한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Solution {
public static int K, magnet[][], pos[];
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(in.readLine());
StringBuilder sb = new StringBuilder();
for (int tc = 1; tc <= T; tc++) {
K = Integer.parseInt(in.readLine());
magnet = new int[4][8];
pos = new int[4]; // 빨간색 화살표 위치
StringTokenizer st = null;
for (int i = 0; i < 4; i++) {
st = new StringTokenizer(in.readLine());
for (int j = 0; j < 8; j++) {
magnet[i][j] = Integer.parseInt(st.nextToken());
}
}
for (int i = 0; i < K; i++) {
st = new StringTokenizer(in.readLine());
int N = Integer.parseInt(st.nextToken())-1;
int D = Integer.parseInt(st.nextToken());
boolean[] visited = new boolean[4];
Queue<int[]> queue = new LinkedList<int[]>();
queue.add(new int[] { N, D }); // 번호, 방향
while(!queue.isEmpty()) {
int[] current = queue.poll();
int num = current[0];
int dir = current[1];
int idx = pos[num]; // 빨간색 화살표 위치
if(num > 0) {
// 왼쪽 마그넷 존재
if(!visited[num-1] && magnet[num][((idx-2)+8)%8] != magnet[num-1][(pos[num-1]+2)%8]) {
// 위치 조정할 마그넷 넣기
queue.add(new int[] {num-1, -dir});
}
}
if(num < 3) {
// 오늘쪽 마그넷 존재
if(!visited[num+1] && magnet[num][(idx+2)%8] != magnet[num+1][(pos[num+1]-2+8)%8]) {
queue.add(new int[] {num+1, -dir});
}
}
// 현재 마그넷 회전
pos[num] = ((pos[num]-dir)%8+8)%8;
visited[num] = true;
}
}
int answer = 0;
for (int i = 0; i < 4; i++) {
if(magnet[i][pos[i]] == 1) answer += Math.pow(2, i);
}
sb.append("#").append(tc).append(" ").append(answer).append("\n");
}
System.out.println(sb);
}
}
'문제풀이' 카테고리의 다른 글
[백준] 1194 달이 차오른다, 가자 - JAVA (0) | 2022.04.18 |
---|---|
[백준] 4485 녹색 옷 입은 애가 젤다지? - JAVA (0) | 2022.04.17 |
[백준] 17143 낚시왕 - JAVA (0) | 2022.04.14 |
[백준] 12026 BOJ 거리 - JAVA (0) | 2022.04.09 |
[SW Academy] 1263 사람 네트워크2 - JAVA (0) | 2022.04.05 |