알고리즘/문제풀이

[시뮬레이션] 톱니바퀴

lipnus 2019. 4. 2. 21:39
반응형

백준 14891번 톱니바퀴 (삼성 SW역량테스트 기출)

https://www.acmicpc.net/submit/14891


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main {

static int N;
static List<Integer>[] wh;

public static void main(String[] args) throws Exception{

wh = new LinkedList[5];

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;

for(int i=1; i<=4; i++){
String line = br.readLine();
wh[i] = new LinkedList<>();

for(int j=0; j<8; j++){
wh[i].add( line.charAt(j)-'0' );
}
}

N = Integer.parseInt(br.readLine());


for(int i=0; i<N; i++){
st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int wise = Integer.parseInt(st.nextToken());
play(n, wise, 0);
}

// print();
System.out.println(getScore());
}


static void print(){

for(int i=1; i<=4; i++){
for(int w: wh[i]){
System.out.printf("%d", w);
}
System.out.println();
}

}




static void play(int n, int wise, int from){

//오른쪽으로 전달
if(from==0 || from==-1){

if(n!=4){
int dir = getDirection(n, 1, wise);
play(n+1, dir, -1);
}
}

//왼쪽으로 전달
if(from==0 || from==1){

if(n!=1){
int dir = getDirection(n, -1, wise);
play(n-1, dir, 1);
}
}

rotate(n, wise);
}



//다음번째 바퀴의 회전방향 반환
static int getDirection(int n, int direction, int wise){

if(direction==1){
if(wh[n].get(2) != wh[n+1].get(6)) wise*=-1;
else wise=0;
}

if(direction==-1){
if(wh[n-1].get(2) != wh[n].get(6)) wise*=-1;
else wise=0;
}
return wise;
}


/**
*
* @param n 몇번 바퀴
* @param wise 1:시계방향, -1:반시계방향
*/
static void rotate(int n, int wise){

//시계방향 회전
if(wise==1){
int temp = wh[n].get(7);
wh[n].remove(7);
wh[n].add(0, temp);
}

//반시계방향 회전
if(wise==-1){
int temp = wh[n].get(0);
wh[n].remove(0);
wh[n].add(temp);
}
}



static int getScore(){
int sum = 0;
if(wh[1].get(0)==1) sum+=1;
if(wh[2].get(0)==1) sum+=2;
if(wh[3].get(0)==1) sum+=4;
if(wh[4].get(0)==1) sum+=8;
return sum;
}


}


반응형

'알고리즘 > 문제풀이' 카테고리의 다른 글

[브루트포스] 사다리 조작  (0) 2019.04.07
[브루트포스] 감시  (0) 2019.04.03
[DFS] 로또  (0) 2019.03.31
[브루트포스] 스타트와 링크  (0) 2019.03.31
[시뮬레이션] 연산자 끼워넣기  (0) 2019.03.31