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
- Proxy Server
- 호스팅이란?
- 세마포어와 뮤텍스의 차이
- 최단 경로
- 클라우드 서버
- Synchronization
- 서버 호스팅
- 세마포어와 뮤텍스
- 프록시서버
- 플로이드 워셜
- 삼성 청년 SW 아카데미
- Proxy
- 뮤텍스란?
- Dijkstra Algorithm
- 플로이드 와샬
- 다익스트라 알고리즘
- 다익스트라
- 호스팅
- 세마포어
- 싸피
- 웹 호스팅
- 싸피 합격
- floyd-warshall
- 싸피 면접 후기
- 뮤텍스
- 동기화
- 세마포어란?
- SSAFY
- 프록시
Archives
- Today
- Total
어제의 나보다 성장한 오늘의 나
[백준][BOJ-14891][자바] 톱니바퀴 본문
14891번: 톱니바퀴
첫째 줄에 1번 톱니바퀴의 상태, 둘째 줄에 2번 톱니바퀴의 상태, 셋째 줄에 3번 톱니바퀴의 상태, 넷째 줄에 4번 톱니바퀴의 상태가 주어진다. 상태는 8개의 정수로 이루어져 있고, 12시방향부터
www.acmicpc.net
import java.util.*;
import java.io.*;
public class Main {
static int[][] gear = new int[4][8];
static int gearAmount = 4; // 톱니바퀴 갯수
static int gearNum = 8; // 톱니 갯수
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
for (int i = 0; i < 4; i++) {
String a = br.readLine();
for (int j = 0; j < 8; j++) {
gear[i][j] = a.charAt(j) - '0';
}
}
int T = Integer.parseInt(br.readLine());
int pow = 1;
int result =0;
for (int i = 0; i < T; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int start = Integer.parseInt(st.nextToken())-1;
int dis = Integer.parseInt(st.nextToken());
int left = start;
int right = start;
boolean leftCheck = false;
boolean rightCheck = false;
int[] rotate = new int[gearAmount];
rotate[start] = dis;
while(true) {
left--;
right++;
dis *=-1;
if(left<0 && right > gearAmount-1) break;
if(left >= 0 && !leftCheck) {
if(gear[left][2] != gear[left+1][6]) rotate[left] = dis;
else leftCheck = true;
}
if(right<gearAmount && !rightCheck) {
if(gear[right][6] != gear[right-1][2]) rotate[right] = dis;
else rightCheck = true;
}
}
for(int j=0; j<gearAmount; j++) {
if(rotate[j] == 0) continue;
rotateGear(j, rotate[j]);
}
}
for(int j=0; j<gearAmount; j++) {
result += gear[j][0] * pow;
pow *=2;
}
System.out.println(result);
}
private static void rotateGear(int curr, int dis) {
int temp = 0;
if (dis == 1) {
temp = gear[curr][gearNum-1];
for (int i = gearNum-1; i > 0; i--) {
gear[curr][i] = gear[curr][i-1];
}
gear[curr][0] = temp;
}else {
temp = gear[curr][0];
for (int i = 0; i < gearNum-1; i++) {
gear[curr][i] = gear[curr][i+1];
}
gear[curr][gearNum-1] = temp;
}
}
}
정리
- 문제 그대로 코딩하면 문제가 없다. 하지만 이 문제는 차례대로 일어나는게 아닌! 돌아가는 톱니바퀴를 다 찾고 마지막에 일관적으로 돌려줘야 한다.
'알고리즘 > 백준(BOJ)' 카테고리의 다른 글
[백준][BOJ-1766][자바] 문제집 (0) | 2021.04.10 |
---|---|
[백준][BOJ-11403][자바] 경로 찾기 (0) | 2021.04.08 |
[백준][BOJ-5052][자바] 전화번호 목록 (0) | 2021.04.08 |
[백준][BOJ-10026][자바] 적록색약 (0) | 2021.04.07 |
[백준][BOJ-9935][자바] 문자열 폭발 (0) | 2021.04.06 |
Comments