14891번: 톱니바퀴
총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴
www.acmicpc.net
| 문제 풀이 : 톱니 바퀴를 k번만큼 회전시키는데 1은 시계방향이고, -1은 반시계 방향이다. n변수에 회전시킬 톱니바퀴 번호를 입력받는다. dir 배열을 주어 회전방향을 결정해준다. wheel 배열은 톱니바퀴의 상태 배열이다. rotat 함수는 방향을 결정해주는 함수로, 서로 맞닿은 톱니의 극이 다른 경우만 1과 -1을 넣어준다. 이후 회전방향대로 알맞는 함수를 호출한다. right 함수는 시계방향으로 돌아가는 함수이고, left 함수는 반시계방향으로 돌아가는 함수이다. k번 만큼 실행해준 뒤 wheel 배열에서 톱니바퀴의 점수 합을 2의 제곱으로 처리하여 answer 변수에 넣어 답을 출력해준다. | 
import java.util.Scanner;
public class test2 {
	static int[][] wheel= new int[5][8];;
	static int k, answer=0;
	static int[] dir;
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		for (int i = 1; i < 5; i++) {
			String s = sc.next();
			for (int j = 0; j < s.length(); j++) {
				wheel[i][j] = s.charAt(j) - 48;
			}
		}
		k = sc.nextInt();
		for (int i = 0; i < k; i++) {
			int n = sc.nextInt();//번호
			int d = sc.nextInt();//방향
			
			dir = new int[5];
			dir[n] = d;
			rotate(n);
		} // end of input
		
		for (int i = 1; i < 5; i++) {
			if(wheel[i][0] == 1) {
				answer+= Math.pow(2, i-1);
			}
		}
		System.out.println(answer);
		
	}// end of main
	public static void rotate(int n) {
		for (int i = n; i>=1; i--) {
			if(wheel[i][6] != wheel[i-1][2]) dir[i-1] = dir[i]*(-1);
			else break;
		}
		
		for(int i=n; i<4; i++) {
	        if(wheel[i][2] != wheel[i+1][6]) dir[i+1] = dir[i]*(-1);
	        else break;
	    }
		
		for (int i = 1; i < 5; i++) {
			if(dir[i] == 1) {
				right(i);
			}else if(dir[i] == -1) {
				left(i);
			}
		}
	}
	public static void right(int n) {// 시계
		int temp = wheel[n][7];
		for (int i = 7; i > 0; i--) {
			wheel[n][i] = wheel[n][i - 1];
		}
		wheel[n][0] = temp;
	}
	public static void left(int n) {// 반시계
		int temp = wheel[n][0];
		for (int i = 0; i < 7; i++) {
			wheel[n][i] = wheel[n][i + 1];
		}
		wheel[n][7] = temp;
	}
}// end of class'ALGORITHM > 프로그래머스 | 백준 | 삼성 | 카카오' 카테고리의 다른 글
| [프로그래머스] 2018 KAKAO BLIND RECRUITMENT (0) | 2020.10.23 | 
|---|---|
| [SWEA] 5658. [모의 SW 역량테스트] 보물상자 비밀번호 (0) | 2020.10.20 | 
| [백준] 17144번 미세먼지 안녕! (0) | 2020.08.28 | 
| [백준] 1987번 알파벳 (0) | 2020.08.26 | 
| [백준] 2668번 숫자고르기 (0) | 2020.08.26 |