정신과 시간의 방
작성일
2024. 11. 8. 00:26
작성자
risehyun
  • 문제

 

  • 풀이
#include <iostream>
#include <queue>
using namespace std;

int main()
{
	ios::sync_with_stdio(false);
    cin.tie(0);
    
	int n = 0;
	queue<int> q;

	cin >> n;

	// 큐 채우기
	for (int i = 1; i <= n; i++)
	{
		q.push(i);
	}

	while (q.size() > 1)
	{
		// 우선 제일 위에 있는 카드를 버린다.
		q.pop();

		// 제일 위에 있는 카드를 제일 아래로 옮긴다. (push 한뒤 pop)
		q.push(q.front());
		q.pop();
	}

	cout << q.front() << '\n';

	return 0;
}

 

  • 풀이

문제 속 요구사항을 순서대로 구현하면 되는 간단한 문제다.
제일 먼저 넣은 카드가 먼저 나가기 때문에 큐를 사용해서 풀 수 있다.

 

1. 우선 큐를 순서대로 채운 뒤,

2. N만큼 반복하면서

3. 제일 위에 있는 카드를 버리고

4. 뒤에 이어서 제일 위에 있는 카드를 제일 아래로 옮기고(push)

5. pop하여 지운다.

 

 

'코딩테스트 > 문제풀이' 카테고리의 다른 글

[백준/10845번/C++] 큐  (0) 2024.11.10
[백준/2443번/C++] 별 찍기 - 6  (0) 2024.11.09
[백준/2442번/C++] 별 찍기 - 5  (0) 2024.11.07
[백준/10093번/C++] 숫자  (0) 2024.11.05
[백준/3273번/C++] 두 수의 합  (0) 2024.10.28