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 |