https://www.acmicpc.net/problem/14891
유형: 시뮬레이션
/*
sol
for 0이상
if 6,2 같으면 break
else 방향left = 방향right *-1
for 4미만
if right6 left2같으면 break
else right = left*-1
for
12시 방향 조사 후 결과에 덧셈
main
입력
sol
*/
#include<iostream>
#include<cstring>
using namespace std;
int circle[4][8];
int cmd[4] = { 0, };
int ans = 0;
void sol(int mid)
{
for (int left = mid - 1; left >= 0; left--)
{
int right = left + 1;
if (circle[left][2] == circle[right][6]) break;
else cmd[left] = cmd[right] * -1;
}
for (int right = mid + 1; right < 4; right++)
{
int left = right - 1;
if (circle[right][6] == circle[left][2]) break;
else cmd[right] = cmd[left] * -1;
}
for (int i = 0; i < 4; i++)
{
if (cmd[i] == -1)//반
{
int tmp = circle[i][0];
for (int j = 0; j < 7; ++j)
{
circle[i][j] = circle[i][j + 1];
}
circle[i][7] = tmp;
}
else if(cmd[i] == 1){//시
int tmp = circle[i][7];
for (int j = 7; j-1>=0; j--)
{
circle[i][j] = circle[i][j-1];
}
circle[i][0] = tmp;
}
}
}
int main() {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 8; j++) {
scanf("%1d", &circle[i][j]);
}
}
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
memset(cmd, 0, sizeof(cmd));
int mid;
cin >> mid; --mid;
cin >> cmd[mid];
sol(mid);
}
if (circle[0][0] == 1) ans += 1;
if (circle[1][0] == 1) ans += 2;
if (circle[2][0] == 1) ans += 4;
if (circle[3][0] == 1) ans += 8;
cout << ans;
}
'알고리즘 > 백준' 카테고리의 다른 글
백준 16234 인구 이동 (0) | 2020.03.13 |
---|---|
백준 15686 치킨 배달 (0) | 2020.03.13 |
백준 15685 드래곤 커브 (0) | 2020.03.13 |
15684 사다리 조작 (0) | 2020.03.13 |
15683 감시 (0) | 2020.03.12 |