[BOJ] 14891. 톱니바퀴
[작성일]
- 2022-03-01
[분류]
- 구현
[문제링크]
[요구사항]
- 톱니바퀴를 K번 돌린 이후 점수를 구하라.
[풀이]
단순 구현문제라는 생각이 들었다.
우선, 톱니바퀴를 string 형태로 모두 받고 K번 회전을 반복한 뒤, 점수계산하는 방식으로 큰 로직을 작성했다.
톱니바퀴를 돌리는 부분을 구현하는 부분은 2부분으로 나누었다.
1) 돌려야할 톱니바퀴를 체크한다.
2) 돌린다.
그대로 구현을 하였다.
[코드]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static String[] cycle = new String[4];
static int K;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
// 톱니바퀴를 string 형태로 모두 받기
for (int i = 0; i < 4; i++) {
cycle[i] = br.readLine();
}
K = Integer.parseInt(br.readLine());
int idx, mode;
// K번 회전
while (K-- > 0) {
st = new StringTokenizer(br.readLine());
idx = Integer.parseInt(st.nextToken());
mode = Integer.parseInt(st.nextToken());
turn(idx - 1, mode);
}
// 점수계산
System.out.println((cycle[0].charAt(0) - '0') + 2 * (cycle[1].charAt(0) - '0') + 4 * (cycle[2].charAt(0) - '0') + 8 * (cycle[3].charAt(0) - '0'));
}
public static void turn(int start, int mode) {
// 돌아가야하는 톱니바퀴부터 체크
int[] isTurn = new int[4];
isTurn[start] = mode;
int idx = start;
while (++idx < 4) {
if (cycle[idx - 1].charAt(2) == cycle[idx].charAt(6)) {
break;
} else {
isTurn[idx] = -isTurn[idx - 1];
}
}
idx = start;
while (--idx >= 0) {
if (cycle[idx + 1].charAt(6) == cycle[idx].charAt(2)) {
break;
} else {
isTurn[idx] = -isTurn[idx + 1];
}
}
// 톱니바퀴 회전
for (int i = 0; i < 4; i++) {
if (isTurn[i] == 1) {
// 시계방향
cycle[i] = cycle[i].charAt(7) + cycle[i].substring(0, 7);
} else if (isTurn[i] == -1) {
// 반시계방향
cycle[i] = cycle[i].substring(1, 8) + cycle[i].charAt(0);
}
}
}
}
Author And Source
이 문제에 관하여([BOJ] 14891. 톱니바퀴), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hyodonglee/BOJ-14891.-톱니바퀴저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)