본문 바로가기

개발/알고리즘 & 자료구조

BOJ 1091 - 카드 섞기 (C++)

반응형

https://www.acmicpc.net/problem/1091

 

1091번: 카드 섞기

지민이는 카지노의 딜러이고, 지금 3명의 플레이어(0, 1, 2)가 있다. 이 게임은 N개의 카드를 이용한다. (0 ~ N-1번) 일단 지민이는 카드를 몇 번 섞은 다음에, 그것을 플레이어들에게 나누어 준다. 0

www.acmicpc.net

BOJ 1091 - 카드 섞기 (C++)

 

#include <iostream>
#include <vector>

using namespace std;


int Ans;
int N;
vector<int> P(100);
vector<int> S(50);

void Shuffle()
{
	for (int i = 0; i < N; i++)
	{
		P[N + S[i]] = P[i];
	}

	for (int i = 0; i < N; i++)
	{
		P[i] = P[N + i];
	}
}

bool ChkFinished()
{
	for (int i = 0; i < N; i++)
	{
		if (i % 3 != P[i])
		{
			return false;
		}
	}

	return true;
}

void getInput()
{
	cin >> N;

	for (int i = 0; i < N; i++)
	{
		cin >> P[i];
	}

	for (int i = 0; i < N; i++)
	{
		cin >> S[i];
	}
}

//void Print(int i)
//{
//	cout << i << "번째" << endl;
//	for (int i = 0; i < N*2; i++)
//	{
//		cout << P[i] << " ";
//	}
//	cout << endl;
//}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	getInput();

	bool isFinished = ChkFinished();

	while (!isFinished)
	{
		Ans += 1;
		Shuffle();
		isFinished=ChkFinished();
		if (Ans > 1e7)
		{
			Ans = -1;
			break;
		}
	}

	cout << Ans;

	return 0;
}
반응형