https://www.acmicpc.net/problem/2164
2164번: 카드2
N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가
www.acmicpc.net
이 문제의 대략적인 단계는
1. 맨 위의 숫자 pop
2. 그리고 나서 숫자를 뒤로 옮김
을 반복하다가 1개가 남았을때의 카드가 뭔지 구하는 문제이다. 덱으로 해결하려다가, 생각해보니 큐만 써도 해결될 것 같아 큐로 해결하였다. 덱으로도 해결가능하다.
#include <iostream>
#include <queue>
using namespace std;
int main () {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int n, temp;
queue<int> q;
cin >> n;
for (int i = 1; i <= n; i++) q.push(i);
while (q.size() != 1) { // 단 한장의 카드가 남을 때까지 반복
q.pop(); // 1단계. 맨 위의 카드는 버림
temp = q.front(); // 2단계. 맨 위의 카드를 저장
q.pop(); // 그리고 버린 후에
q.push(temp); // 맨 뒤로 옮김
}
cout << q.front();
}
'coding_test > BAEKJOON' 카테고리의 다른 글
백준 10814번 C, C++ 풀이 (0) | 2021.11.25 |
---|---|
백준 11650번 C, C++ 풀이 (0) | 2021.11.25 |
백준 1181번 C, C++ 풀이 (0) | 2021.11.25 |
백준 10773번 C++풀이 (0) | 2021.11.18 |
백준 1009번 C언어 풀이 (0) | 2021.11.11 |