반응형
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 | 31 |
Tags
- ios
- swift 클로저
- 인프라
- 부스트코스
- os
- Python
- 네트워크
- 운영체제
- AWS
- docker
- linux
- 프로세스
- 도커 명령어
- kubernetes
- 클라우드
- k8s
- 쿠버네티스
- C++
- boj
- centOS7
- 데브옵스
- 도커
- devops
- 리눅스
- NGINX
- 컨테이너
- 도커 컨테이너
- 도커 이미지
- Swift
- centOS
Archives
- Today
- Total
귀염둥이의 메모
[백준] 14891번: 톱니바퀴 (C++) 본문
반응형
14891번: 톱니바퀴
첫째 줄에 1번 톱니바퀴의 상태, 둘째 줄에 2번 톱니바퀴의 상태, 셋째 줄에 3번 톱니바퀴의 상태, 넷째 줄에 4번 톱니바퀴의 상태가 주어진다. 상태는 8개의 정수로 이루어져 있고, 12시방향부터
www.acmicpc.net
시뮬레이션 문제로 dfs를 이용하여 쉽게 풀 수 있다.
- rotateGear 함수를 구현해서 톱니 번호, 회전 방향을 인자로 받아서 톱니 회전을 수행한다.
- 방문 체크를 하며 주어진 조건에 맞게 dfs를 구현.
소스코드
#include <bits/stdc++.h>
using namespace std;
int k, result;
int gear[5][8];
int rot[100][2];
int vis[5];
void rotateGear(int num, int dir) {
int tmp, tmp2;
if (dir == 1) { // 시계방향
tmp = gear[num][7]; // 톱니의 마지막 극
for (int i = 0; i <= 7; i++) {
tmp2 = gear[num][i];
gear[num][i] = tmp;
tmp = tmp2;
}
return;
}
// 반시계 방향
tmp = gear[num][0];
for (int i = 7; i >= 0; i--) {
tmp2 = gear[num][i]; // 톱니의 12시 방향 극
gear[num][i] = tmp;
tmp = tmp2;
}
}
void dfs(int cur, int dir) {
vis[cur] = 1;
if (cur - 1 > 0 && cur - 1 <= 4 && !vis[cur - 1] && gear[cur - 1][2] != gear[cur][6])
dfs(cur - 1, -dir);
if (cur + 1 > 0 && cur + 1 <= 4 && !vis[cur + 1] && gear[cur + 1][6] != gear[cur][2])
dfs(cur + 1, -dir);
rotateGear(cur, dir);
}
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
string s;
for (int i = 1; i <= 4; i++) {
getline(cin, s);
for (int j = 0; j < s.size(); j++)
gear[i][j] = s[j] - '0';
}
cin >> k;
for (int i = 0; i < k; i++)
cin >> rot[i][0] >> rot[i][1];
for (int i = 0; i < k; i++) {
memset(vis, 0, sizeof(vis));
dfs(rot[i][0], rot[i][1]);
}
if (gear[1][0]) result += 1;
if (gear[2][0]) result += 2;
if (gear[3][0]) result += 4;
if (gear[4][0]) result += 8;
cout << result;
return 0;
}
반응형
'CS > 백준' 카테고리의 다른 글
[백준] 14888번: 연산자 끼워넣기 (C++) (0) | 2021.04.07 |
---|---|
[백준] 2573번: 빙산 (C++) (2) | 2021.04.06 |
[백준] 14502번: 연구소 (C++) (0) | 2021.04.03 |
[백준] 14499번: 주사위 굴리기 (C++) (0) | 2021.04.02 |
[백준] 2468번: 안전 영역 (C++) (0) | 2021.04.02 |
Comments