728x90
반응형
문제는 여기!
import java.io.*;
import java.util.*;
public class Main {
static int gear[][];
static int d[]; //기어의 회전정보
static int n, m;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
gear = new int[4][8];
for(int i=0; i<4; i++){
String s = br.readLine();
for(int j=0; j<8; j++){
gear[i][j] = s.charAt(j) - '0';
}
}
int k = Integer.parseInt(br.readLine());
while(k-- > 0){
st = new StringTokenizer(br.readLine());
// 배열에 담긴 gear는 1부터 시작이 아닌 0부터라 -1을 해줌
int gearN = Integer.parseInt(st.nextToken()) - 1;
int turn = Integer.parseInt(st.nextToken());
// 톱니의 회전방향 정보를 담음
d = new int[4];
d[gearN] = turn;
checkDir(gearN);
gearTurn();
}
int ans = 0;
if(gear[0][0] == 1) ans += 1;
if(gear[1][0] == 1) ans += 2;
if(gear[2][0] == 1) ans += 4;
if(gear[3][0] == 1) ans += 8;
System.out.println(ans);
}
static void checkDir(int gearN){
// 좌측 톱니 회전 방향 검사
for(int i=gearN-1; i>=0; i--){
if(gear[i][2] != gear[i+1][6]){
d[i] = -d[i+1];
} else { // 회전하지 않으면 다음 톱니도 회전하지 않음
break;
}
}
// 우측 톱니 회전 방향 검사
for(int i=gearN+1; i<4; i++){
if(gear[i][6] != gear[i-1][2]){
d[i] = -d[i-1];
} else { // 회전하지 않으면 다음 톱니도 회전하지 않음
break;
}
}
}
static void gearTurn() {
int temp = 0;
for(int i=0; i<4; i++){ // 모든 톱니에 대해서
// 시계방향 회전
if(d[i] == 1){
temp = gear[i][7];
for(int j=7; j>0; j--){
gear[i][j] = gear[i][j-1];
}
gear[i][0] = temp;
}
// 반시계방향 회전
if(d[i] == -1){
temp = gear[i][0];
for(int j=0; j<7; j++){
gear[i][j] = gear[i][j+1];
}
gear[i][7] = temp;
}
}
}
}
string 숫자 하나씩 배열에 받는 다른 방법!
for (int i = 0; i < 4; i++) {
String[] input = br.readLine().split("");
for (int j = 0; j < 8; j++) {
wheel[i][j] = Integer.parseInt(input[j]);
}
}
728x90
반응형
'알고리즘 > 시뮬레이션 & 구현' 카테고리의 다른 글
[백준/구현/C++] 16234번 인구 이동 (0) | 2023.04.25 |
---|---|
[백준/구현/C++] 20055번 컨베이어 벨트 위의 로봇 (0) | 2023.03.29 |
[백준/구현/C++] 17141번 연구소2 (0) | 2023.03.13 |
[백준/구현/C++] 13335번 트럭 * (0) | 2023.03.10 |
[백준/구현/C++] 11659번 구간 합 구하기 4 (2) | 2023.02.20 |