-
[BOJ] #14891 _ 톱니바퀴Problem Solving/BOJ 2019. 8. 28. 21:44
[톱니바퀴] https://www.acmicpc.net/problem/14891
톱니바퀴가 한 톱니바퀴의 회전에 따라 연쇄적으로 계속 도는 것이 아닌,
조건이 맞으면 딱 한 번씩만 회전하는 간단한 시뮬레이션 문제이다.
[ 소스 코드 ]
#include <cstdio> #include <vector> #include <cmath> #include <cstring> #include <algorithm> using namespace std; vector<vector<int> > wheel(4, vector<int>(8, 0)); int chk[4]; void turnWheel(int n, int d); int solve(); int main() { int k, n, d; for (int i = 0; i < 4; i++) { for (int j = 0; j < 8; j++) scanf("%1d", &wheel[i][j]); } scanf("%d", &k); for (int i = 0; i < k; i++) { scanf("%d %d", &n, &d); turnWheel(n - 1, d); memset(chk, 0, sizeof(int) * 4); } printf("%d\n", solve()); return 0; } void turnWheel(int n, int d) { int l = n - 1, r = n + 1, tmp; chk[n] = 1; if (r < 4) { if (chk[r] == 0) { if (wheel[n][2] != wheel[r][6]) turnWheel(r, d*(-1)); } } if (l >= 0) { if (chk[l] == 0) { if (wheel[n][6] != wheel[l][2]) if (chk[l] == 0) turnWheel(l, d*(-1)); } } if (d == 1) { tmp = wheel[n].back(); wheel[n].pop_back(); wheel[n].insert(wheel[n].begin(), tmp); } else { tmp = wheel[n].front(); wheel[n].erase(wheel[n].begin()); wheel[n].push_back(tmp); } } int solve() { int score = 0; for (int i = 0; i < 4; i++) { if (wheel[i][0]) score += pow(2, i); } return score; }
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ] #1976 _ 여행 가자 (0) 2019.10.20 [BOJ] #17070 _ 파이프 옮기기1 (0) 2019.08.28 [BOJ] #14888 _ 연산자 끼워넣기 (0) 2019.08.28 [BOJ] #14503 _ 로봇 청소기 (0) 2019.08.28 [BOJ] #14501 _ 퇴사 (0) 2019.08.28 댓글