반응형
simulation 문제였습니다.
풀이방법
1. 매 k 마다 다음을 수행합니다.
1-1. 4개의 톱니바퀴에 대한 회전 방향 계산 후 배열 저장
1-2. 회전 방향 정보대로 톱니바퀴 회전
1-3. 회전 방향 저장 된 배열 초기화
2. 점수 계산 후 출력
Code
#include <bits/stdc++.h>
using namespace std;
int direction[4];
vector<vector<int>> gear;
vector <int> getGearVector(string gearInfo){
vector <int> tmpGear;
for(int i = 0; i < 8; i++)
tmpGear.push_back(gearInfo[i] - '0');
return tmpGear;
}
void fillDirection(int start, int rotateDirection) {
int next = start + 1;
int prev = start - 1;
direction[start] = rotateDirection;
if (next < 4 && direction[next] == 0 && gear[start][2] != gear[next][6]) {
fillDirection(next, rotateDirection * -1);
}
if (prev >= 0 && direction[prev] == 0 && gear[start][6] != gear[prev][2]) {
fillDirection(prev, rotateDirection * -1);
}
}
void rotateGear() {
for (int i = 0; i < 4; i++) {
if (direction[i] == 1) {//시계방향
int temp = gear[i][7];
for (int j = 7; j > 0; j--)
gear[i][j] = gear[i][j - 1];
gear[i][0] = temp;
}
else if (direction[i] == -1) {//반시계방향
int temp = gear[i][0];
for (int j = 0; j <7; j++)
gear[i][j] = gear[i][j + 1];
gear[i][7] = temp;
}
}
}
void clearDirection() {
for (int i = 0; i < 4; i++) {
direction[i] = 0;
}
}
int getPoint(){
int point = 0;
for(int i =0; i < 4; i++){
if(gear[i][0]) point += pow(2,i);
}
return point;
}
int main() {
int gearNum;
int rotateDirection;
int k;
for (int i = 0; i < 4; i++) {
string gearInfo;
cin >> gearInfo;
gear.push_back(getGearVector(gearInfo));
}
cin >> k;
for (int i = 0; i < k; i++) {
cin >> gearNum >> rotateDirection;
fillDirection(gearNum-1, rotateDirection);
rotateGear();
clearDirection();
}
cout << getPoint();
}
'Algorithm > Implementation' 카테고리의 다른 글
(C++) - 백준(BOJ) 1269번 : 대칭 차집합 답 (0) | 2021.01.11 |
---|---|
(C++) - 백준(BOJ) 1021번 : 회전하는 큐 답 (0) | 2021.01.10 |
(C++) - 백준(BOJ) 13300번 : 방 배정 답 (0) | 2021.01.09 |
(C++) - 백준(BOJ) 1051번 : 숫자 정사각형 답 (0) | 2021.01.09 |
(C++) - 백준(BOJ) 2851번 : 슈퍼마리오 답 (0) | 2021.01.09 |