일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- bfs
- 2018 KAKAO BLIND RECRUITMENT 1차
- Java
- 2018 카카오
- 삼성 SW 기출문제
- 2020 카카오 공채
- 비트마스크
- 부스트코스
- set
- 2020 KAKAO BLIND RECRUITMENT
- 2019 KAKAO BLIND RECRUITMENT
- gcp
- 카카오 공채
- map
- 2019 카카오 개발자 겨울 인턴십 코딩테스트
- gradle
- c++
- 2018 카카오 공채
- 젠킨스
- 백준
- 삼성 SW 역량테스트
- dfs
- 알고리즘
- 카카오
- 프로그래머스
- 자바
- 2019 카카오 공채
- CS 스터디
- Baekjoon
- 2018 KAKAO BLIND RECRUITMENT
Archives
- Today
- Total
아무코딩
[백준 14891] 톱니바퀴 본문
문제풀이
1. 먼저 마주치는 톱니바퀴의 모양을 보고 방향다시 잡는다.
현재 톱니 기준 왼쪽은 6 오른쪽은 2번째 톱니를 확인한다.
2.그리고 아래와같은 방식으로 회전시킨다. 반대방향은 반대로 하면된다.
소스코드
더보기
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
#include <stdio.h>
typedef struct Wheel{
int tooth[8];
int dir;
int score;
}Wheel;
int n_turn;
Wheel wheel[4];
void changeAllDir(int num,int dir){
//톱니바퀴 오른쪽방향설정
for (int i = num;i<3; i++) {
if (wheel[i].tooth[2] == wheel[i + 1].tooth[6]) //같은극일때
break;
else {//다른극일때
wheel[i + 1].dir = -1 * wheel[i].dir;
}
}
//톱니바퀴 왼쪽방향설정
for (int i = num; i>0; i--) {
if (wheel[i].tooth[6] == wheel[i - 1].tooth[2]) //같은극일때
break;
else {//다른극일때
wheel[i - 1].dir = -1 * wheel[i].dir;
}
}
}
void turnWheel(int num,int dir){
for(int i=0;i<4;i++){
wheel[i].dir=0;
}
wheel[num].dir = dir;
changeAllDir(num,dir);
for (int i = 0; i < 4; i++) {
if (wheel[i].dir == 1) {
int temp = wheel[i].tooth[7];
for (int j = 6; j >= 0; j--) {
wheel[i].tooth[j + 1] = wheel[i].tooth[j];
}
wheel[i].tooth[0] = temp;
}
else if(wheel[i].dir==-1){
int temp = wheel[i].tooth[0];
for (int j = 0; j <=6; j++) {
wheel[i].tooth[j] = wheel[i].tooth[j+1];
}
wheel[i].tooth[7] = temp;
}
else {//dir==0
continue;
}
}
}
int main() {
int score=1;
for(int i=0;i<4;i++){
for(int j=0;j<8;j++){
scanf("%1d",&wheel[i].tooth[j]);
}
wheel[i].score=score;
score*=2;
}
scanf("%d",&n_turn);
for(int i=0;i<n_turn;i++){
int wheel_num;
int wheel_dir;
scanf("%d %d",&wheel_num,&wheel_dir);
turnWheel(wheel_num-1, wheel_dir);
// printf("\n톱니바퀴\n");
// for(int i=0;i<4;i++){
// for(int j=0;j<8;j++){
// printf("%d",wheel[i].tooth[j]);
// }
// printf("\n");
// }
}
int sum=0;
for(int i = 0; i < 4; i++) {
if (wheel[i].tooth[0] == 1)
sum += wheel[i].score;
}
printf("%d\n",sum);
return 0;
}
|
'알고리즘 > 백준' 카테고리의 다른 글
[백준 11559] Puyo Puyo (0) | 2020.04.25 |
---|---|
[백준 3190] 뱀 (0) | 2020.04.22 |
[백준 1991] 트리 순회 (0) | 2020.04.17 |
[백준 1806] 부분합 (0) | 2020.04.17 |
[백준 15685] 드래곤 커브 (0) | 2020.04.15 |
Comments