본문 바로가기
알고리즘/백준 문제 풀이

[BOJ/백준] 2164번 카드2 - c++ 풀이

by 미니상미니 2023. 4. 10.
반응형

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

 

2164번: 카드2

N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가

www.acmicpc.net

 

 

 

 


  • 문제


해설

N을 입력받은 후 1 ~ N까지의 수를 큐에 삽입한다.

 

규칙은 다음과 같다.

1. 맨 위에 카드를 버린다
2. 맨 위에 카드를 맽 밑으로 옮긴다

다음 2개의 규칙을 순서대로 반복하면서 마지막에 남은 카드를 출력하면 된다.

 

1번을 코드로 옮기면 queue.pop();에 해당하고

2번을 코드로 옮기면 queue.push(queue.front()); queue.pop();에 해당한다

queue.push(queue.front());로 맨 위에 카드를 맨 밑으로 넣고 queue.pop();으로 맨 위에 카드를 지워준다.

queue.front()는 큐의 앞을 참조하는 함수로 삭제는 해주지 않기 때문에 따로 삭제를 해주어야 한다.

코드

#include <iostream>
#include <stack>
#include <queue>

using namespace std;

int main() {

	ios_base::sync_with_stdio(0);
	cin.tie(0);

	queue<int> Q;
	int N;
	cin >> N;
	for (int i = 1; i <= N; i++) {
		Q.push(i);
	}

	while (Q.size() != 1) {
    	Q.pop();
		Q.push(a.front());
		Q.pop();
	}

	cout << Q.front();

	

	return 0;
}

 

 

 

 

 

반응형

댓글