Notice
Recent Posts
Recent Comments
Link
Dev.baelanche
[백준 14891] 톱니바퀴 본문
반응형
https://www.acmicpc.net/problem/14891
문제가 너무 길어 링크로 대체하겠다.
연속으로 시뮬레이션 문제를 풀었다.
삼성 역량 평가 문제들은 알고리즘 지식 보다 문제해결능력에 더 초점이 맞춰져 있는 것 같다.
시뮬레이션 문제답게 이 문제 역시 문제에서 요구한대로만 잘 풀면된다.
시계, 반시계방향 회전 로직, 양 옆의 톱니바퀴 회전 로직만 구현해내면 끝이다.
필자는 재귀와 방문배열의 활용으로 풀었다.
public class Main {
static int a[][] = new int[5][9];
static boolean visited[] = new boolean[5];
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
for(int i=1; i<=4; i++) {
String s = br.readLine();
for(int j=1; j<=8; j++)
a[i][j] = s.charAt(j-1) - '0';
}
int k = Integer.parseInt(br.readLine());
while(k-->0) {
st = new StringTokenizer(br.readLine());
int idx = Integer.parseInt(st.nextToken());
int d = Integer.parseInt(st.nextToken());
visited[idx] = true;
rotate(idx, d);
Arrays.fill(visited, false);
}
int score = 0;
for(int i=1; i<=4; i++)
if(a[i][1] == 1)
score += Math.pow(2, i-1);
System.out.println(score);
}
public static void rotate(int idx, int d) {
if(idx - 1 > 0 && !visited[idx-1])
if(a[idx-1][3] != a[idx][7]) {
visited[idx-1] = true;
rotate(idx-1, -d);
}
if(idx + 1 < 5 && !visited[idx+1])
if(a[idx][3] != a[idx+1][7]) {
visited[idx+1] = true;
rotate(idx+1, -d);
}
int prev = a[idx][1];
int curr = 0;
if(d == 1) {
for(int i=2; i<=8; i++) {
curr = a[idx][i];
a[idx][i] = prev;
prev = curr;
}
} else {
for(int i=8; i>=2; i--) {
curr = a[idx][i];
a[idx][i] = prev;
prev = curr;
}
}
a[idx][1] = curr;
}
}
반응형
'Data Structure & Algorithm > PS - JAVA' 카테고리의 다른 글
[백준 15686] 치킨 배달 (0) | 2019.06.25 |
---|---|
[백준 17142] 연구소 3 (0) | 2019.06.25 |
[백준 16235] 나무 재테크 (0) | 2019.06.24 |
[백준 13458] 시험 감독 (0) | 2019.06.24 |
[백준 17143] 낚시왕 (0) | 2019.06.24 |
Comments