Algorithm/백준

[백준] 2164 카드2 with C++

nowkoes 2023. 5. 13. 00:00

문제설명


입출력 예제


개념

 

주어진 예시에 대한 동작 과정

 

 1부터 N까지 정렬되어 있는 시퀀스에서 맨 앞에 수를 뽑고, 앞 뒤를 바꿔갔을 때, 마지막에 남는 카드가 무엇일지 구하는 문제다. 먼저 들어간 요소가 뽑힌다는 관점에서 queue를 적절히 활용하면 해결할 수 있는 문제다.


풀이

#include <iostream>
#include <queue>
using namespace std;

int main()
{
	int N, n;
	cin >> N;
	queue<int> q;

	for (int i = 1; i <= N; ++i)
		q.push(i);

	if (q.size() == 1)
		cout << '1';

	else
	{
		q.pop();

		while (q.size() > 1)
		{
			n = q.front();
			q.pop();
			q.push(n);
			q.pop();
		}

		cout << q.back();
	}
}
반응형