사용 알고리즘: 구현 빡
사용 언어: java
package src;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.StringTokenizer;
/**
* N극은 0
* S극은 1
*
* 1번 톱니바퀴: 2인덱스(2번 톱니)
* 2번 톱니바퀴: 6인덱스(1번 톱니)
* 2인덱스(3번 톱니)
* 3번 톱니바퀴: 6인덱스(2번 톱니)
* 2인덱스(4번 톱니)
* 4번 톱니바퀴: 6인덱스(3번 톱니)
*/
public class Main_bj_14891_톱니바퀴 {
static ArrayList<ArrayList<Integer>> wheels = new ArrayList<>(4);
static int[] directoins; //돌릴 방향
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
for(int i=0; i<4; i++) {
String s = br.readLine();
ArrayList<Integer> wheel = new ArrayList<>(8);
for(int j=0; j<8; j++) {
wheel.add(s.charAt(j) - '0');
}
wheels.add(wheel);
}
int k = Integer.parseInt(br.readLine()); //회전 횟수
for(int i=0; i<k; i++) {
st = new StringTokenizer(br.readLine());
int wheelNum = Integer.parseInt(st.nextToken()) - 1;
int dir = Integer.parseInt(st.nextToken());
solve_14891(wheelNum, dir);
}
//점수 계산
int ans= 0;
for(int i=0; i<4; i++) {
if(wheels.get(i).get(0) == 1) {
ans += Math.pow(2, i);
}
}
//답 출력
System.out.println(ans);
}
private static void solve_14891(int wheelNum, int dir) {
directoins = new int[4];
directoins[wheelNum] = dir;
//방향 배열
//기준 톱니 왼쪽
for(int i=wheelNum-1; i>=0; i--) {
//왼 2 오 6
if(wheels.get(i).get(2) == wheels.get(i+1).get(6)) break; //더 안 돌려도 됨
else {
directoins[i] = directoins[i+1] == -1 ? 1 : -1;
}
}
//기준 톱니 오른쪽
for(int i=wheelNum+1; i<4; i++) {
if(wheels.get(i).get(6) == wheels.get(i-1).get(2)) break;
else {
directoins[i] = directoins[i-1] == -1? 1 : -1;
}
}
//방향 배열에 맞게 회전
for(int i=0; i<4; i++) {
if(directoins[i] == 0) continue;
else if(directoins[i] == -1) { //반시계 방향으로 돌리기
//앞을 뺴서 뒤로 넣기
int tmp = wheels.get(i).remove(0);
wheels.get(i).add(tmp);
}
else {
int tmp = wheels.get(i).remove(7);
wheels.get(i).add(0, tmp);
}
}
}
}
class DirInfo {
int wheelNum;
int dir;
public DirInfo(int wheelNum, int dir) {
this.wheelNum = wheelNum;
this.dir = dir;
}
}
어케 돌리지..했는데
돌릴 방향을 저장하는 배열을 만들어서 돌리면 됐다
그렇다...
'알고리즘 > 백준' 카테고리의 다른 글
12100_2048 (Easy) (1) | 2024.06.14 |
---|---|
1041_주사위 * (1) | 2024.06.14 |
3190_뱀 (1) | 2024.06.13 |
1062_가르침 ** (0) | 2024.06.13 |
1253_좋다 (0) | 2024.06.13 |