문제는 요기 -> https://www.acmicpc.net/problem/14891
처음에 짤때는 너무 지저분하게 짜서 다른사람 소스보면서 정리 했당..
시뮬레이션 문제이다
#include<iostream>
using namespace std;
char chain[5][15];
int turnchk[5], result, K, num, dir;
void turn(int n, int d)
{
char copy[10];
for (int i = 1; i <= 8; i++)
{
copy[i] = chain[n][i];
}
if (d == 1) //시계
{
chain[n][1] = copy[8];
for (int i = 2; i <= 8; i++)
{
chain[n][i] = copy[i - 1];
}
}
else //반시계
{
chain[n][8] = copy[1];
for (int i = 1; i <= 7; i++)
{
chain[n][i] = copy[i + 1];
}
}
}
void func(int n, int d)
{
int left, right;
left = n;
right = n;
turnchk[n] = d;
while (right != 4) //오른쪽
{
if (chain[right][3] != chain[right + 1][7])
{
turnchk[right + 1] = turnchk[right] * -1;
right++;
}
else
break;
}
while (left != 1)
{
if (chain[left][7] != chain[left - 1][3])
{
turnchk[left - 1] = turnchk[left] * -1;
left--;
}
else
break;
}
}
int main()
{
for (int i = 1; i <= 4; i++)
{
for (int j = 1; j <= 8; j++) {
cin >> chain[i][j];
}
}
cin >> K;
for (int i = 0; i < K; i++)
{
for (int j = 1; j <= 4; j++)
{
turnchk[j] = 0;
}
cin >> num >> dir;
func(num, dir);
for (int j = 1; j <= 4; j++)
{
if (turnchk[j] != 0)
{
turn(j, turnchk[j]);
}
}
}
for (int i = 1; i <= 4; i++)
{
if (i == 1 && chain[1][1] == '1')
{
result += 1;
}
else if (i == 2 && chain[2][1] == '1')
{
result += 2;
}
else if (i == 3 && chain[3][1] == '1')
{
result += 4;
}
else if (i == 4 && chain[4][1] == '1')
{
result += 8;
}
}
cout << result << endl;
}
'알고리즘문제풀이' 카테고리의 다른 글
[백준14502]연구소 (0) | 2019.02.12 |
---|---|
[백준 2151]거울설치 (0) | 2019.02.12 |
[백준14627]파닭파닭 (0) | 2018.03.02 |
[백준 14890]경사로 (0) | 2017.12.05 |
[백준 14889]스타트와 링크 (0) | 2017.11.30 |