반응형
전에 풀어본 유형.
다만 이웃 톱니 영향은 회전 이전에 체크해야 함.
#include<iostream>
#include<vector>
using namespace std;
vector<pair<int, int> > vec;
vector<pair<int, int> > r;
int K;
int arr[5][9];
int cal()
{
int count = 0;
if (arr[1][1])
{
count += 1;
}
if (arr[2][1])
{
count += 2;
}
if (arr[3][1])
{
count += 4;
}
if (arr[4][1])
{
count += 8;
}
return count;
}
void tok(int idx, int dir)
{
int temp[9];
for (int i = 1; i <= 8; i++)
{
temp[i] = arr[idx][i];
}
if (dir == 1)
{
for (int i = 2; i <= 8; i++)
{
arr[idx][i] = temp[i - 1];
}
arr[idx][1] = temp[8];
}
else
{
for (int i = 7; i >= 1; i--)
{
arr[idx][i] = temp[i + 1];
}
arr[idx][8] = temp[1];
}
}
void move()
{
for (int i = 0; i < vec.size(); i++)
{
int idx = vec[i].first;
int dir = vec[i].second;
r.clear();
r.push_back({ idx,dir });
if (idx == 1)
{
if (arr[1][3] != arr[2][7])
{
r.push_back({ 2,-dir });
if (arr[2][3] != arr[3][7])
{
r.push_back({ 3,dir });
if (arr[3][3] != arr[4][7])
{
r.push_back({ 4,-dir });
}
}
}
}
else if (idx == 2)
{
if (arr[1][3] != arr[2][7])
{
r.push_back({ 1,-dir });
}
if (arr[2][3] != arr[3][7])
{
r.push_back({ 3,-dir });
if (arr[3][3] != arr[4][7])
{
r.push_back({ 4,dir });
}
}
}
else if (idx == 3)
{
if (arr[3][3] != arr[4][7])
{
r.push_back({ 4,-dir });
}
if (arr[3][7] != arr[2][3])
{
r.push_back({ 2,-dir });
if (arr[2][7] != arr[1][3])
{
r.push_back({ 1,dir });
}
}
}
else if (idx == 4)
{
if (arr[4][7] != arr[3][3])
{
r.push_back({ 3,-dir });
if (arr[3][7] != arr[2][3])
{
r.push_back({ 2,dir });
if (arr[2][7] != arr[1][3])
{
r.push_back({ 1,-dir });
}
}
}
}
for (int j = 0; j < r.size(); j++)
{
tok(r[j].first, r[j].second);
}
}
}
int main(int argc, char** argv)
{
int test_case;
int T;
std::cin >> T;
/*
여러 개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
*/
for (test_case = 1; test_case <= T; ++test_case)
{
std::cin >> K;
vec.clear();
for (int i = 1; i <= 4; i++)
{
for (int j = 1; j <= 8; j++)
{
std::cin >> arr[i][j];
}
}
for (int i = 0; i < K; i++)
{
int a, b;
std::cin >> a;
std::cin >> b;
vec.push_back({ a,b });
}
move();
std::cout << "#" << test_case << " " << cal() << endl;
}
return 0;//정상종료시 반드시 0을 리턴해야합니다.
}
반응형
'Algorithm' 카테고리의 다른 글
4008. [모의 SW 역량테스트] 숫자 만들기 (0) | 2020.04.03 |
---|---|
5653. [모의 SW 역량테스트] 줄기세포배양 (0) | 2020.04.02 |
5656. [모의 SW 역량테스트] 벽돌 깨기 (0) | 2020.03.31 |
SW 5644. [모의 SW 역량테스트] 무선 충전 (0) | 2020.03.30 |
sw 1227. [S/W 문제해결 기본] 7일차 - 미로2 (0) | 2020.03.28 |