반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- mybatis
- 시뮬레이션
- 코딩테스트
- java
- 프로그래머스
- 백준
- 자바
- 데이터탑입
- json파싱
- ClassPathResource
- JSON
- 원시타입
- Spring
- primitivetype
- 차이점
- 참조타입
- ReferenceType
- 차이
- 변수
- sql태그
- 자바오류
- Exception
- 알고리즘
- string
- include태그
- 내맘대로정리
- 주사위굴리기
- char
- Char[]
- SQL
Archives
- Today
- Total
재채기는 H
백준 14891 - 톱니바퀴 JAVA 본문
반응형
https://www.acmicpc.net/problem/14891
시뮬레이션 문제
푸는데 오래 걸렸고 나한테는 어려웠던 문제...
그래서 다른 분의 코드를 참고해서 해결하였다.
처음에 톱니바퀴가 도는 부분에서 하나의 메서드 안에서 해결하려고 했다.
그러니 조건이 많아지고 코드가 길어졌다. 나중에는 조건에서 값들이 꼬여버려서 결국 나의 작성 코드를 버려야 했다.
이때 받은 스트레스는 정말 말로 표현할 수가 없다...
아래 코드에서는 왼쪽, 오른쪽으로 나아가는 메서드를 만들었고 마주 보는 방향이 같다면 회전을 시켜 나아갔다.
이와 같이
문제의 기능마다의 메서드를 나눌 수 있게 더 열심히 공부해야겠다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class 백준_톱니바퀴_14891 {
static int[][] wheelArr = new int[4][8];
static int K;
static boolean[] check;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
for (int i = 0; i < 4; i++) {
String s = br.readLine();
int r = 0, l = 0;
for (int j = 0; j < 8; j++) {
wheelArr[i][j] = s.charAt(j) - '0';
}
}
K = Integer.parseInt(br.readLine().trim());
StringTokenizer st;
for (int i = 0; i < K; i++) {
st = new StringTokenizer(br.readLine());
check = new boolean[3];
solution(Integer.parseInt(st.nextToken()) - 1, Integer.parseInt(st.nextToken()));
}
int total = 0;
if (wheelArr[0][0] == 1) {
total += 1;
}
if (wheelArr[1][0] == 1) {
total += 2;
}
if (wheelArr[2][0] == 1) {
total += 4;
}
if (wheelArr[3][0] == 1) {
total += 8;
}
System.out.println(total);
}
// 9시 방향은 2, 3시 방향은 6
static void solution(int idx, int dir) {
left(idx - 1, -dir);
right(idx + 1, -dir);
rotate(idx, dir);
}
// 왼쪽에 있던 톱니바퀴 회전 여부 결정
static void left(int idx, int dir) {
if (idx < 0)
return;
if (wheelArr[idx][2] != wheelArr[idx + 1][6]) {
left(idx - 1, -dir);
rotate(idx, dir);
}
}
// 오른쪽에 있던 톱니바퀴 회전 여부 결정
static void right(int idx, int dir) {
if (idx > 3)
return;
if (wheelArr[idx][6] != wheelArr[idx - 1][2]) {
right(idx + 1, -dir);
rotate(idx, dir);
}
}
// dir = 1 시계방향, dir = -1 반시계방향
static void rotate(int idx, int dir) {
if (dir == 1) {
int temp = wheelArr[idx][7];
for (int i = 7; i > 0; i--) {
wheelArr[idx][i] = wheelArr[idx][i - 1];
}
wheelArr[idx][0] = temp;
} else {
int temp = wheelArr[idx][0];
for (int i = 0; i < 7; i++) {
wheelArr[idx][i] = wheelArr[idx][i + 1];
}
wheelArr[idx][7] = temp;
}
}
}
반응형
'알고리즘' 카테고리의 다른 글
백준 15686 - 치킨 배달 JAVA (0) | 2020.07.28 |
---|---|
백준 15684 - 사다리 조작 JAVA (0) | 2020.07.28 |
백준 15683 - 감시 JAVA (0) | 2020.07.25 |
백준 14889 - 스타트와 링크 JAVA (0) | 2020.07.24 |
백준 14888 - 연산자 끼워넣기 JAVA (0) | 2020.07.24 |
Comments