문제 출처: https://www.acmicpc.net/problem/2164
1. 코드
#include <iostream>
using namespace std;
class card {
int f;
int b;
int *arr;
public:
card(int n) {
f = 0;
b = -1;
arr = new int[n];
}
void push(int n) {
arr[++b] = n;
}
int pop() {
if (empty()) return -1;
return arr[f++];
}
int size() {
return b - f + 1;
}
int empty() {
return (b - f) == -1;
}
~card() {
delete[] arr;
}
};
int main(void)
{
ios_base::sync_with_stdio(false); cin.tie(NULL);
int n;
cin >> n;
card q(n * 2);
for (int i = 1; i <= n; i++) q.push(i);
while (q.size() != 1)
{
q.pop();
q.push(q.pop());
}
cout << q.pop();
}
2. 풀이
문제는 간단하다. 1부터 N까지 카드를 큐에 저장한 후 처음에는 그냥 pop을 해주고 그 이후에 다시 pop을 해주는데 여기서 이 값을 다시 push 해주고 큐에 저장된 값이 1개라면 그 값을 출력해주는 문제이다. 그래서 큐에 대한 기능을 구현한 다음 while() 문을 통해서 손쉽게 해결이 가능하다.
'컴퓨터 > 백준 알고리즘' 카테고리의 다른 글
백준 알고리즘 1966번: 프린터 큐 [C++] (0) | 2021.05.17 |
---|---|
백준 알고리즘 11866번: 요세푸스 문제 0 [C++] (0) | 2021.05.16 |
백준 알고리즘 4949번: 균형잡힌 세상 [C++] (0) | 2021.05.11 |
백준 알고리즘 10773번: 제로 [C++] (0) | 2021.05.09 |
백준 알고리즘 2004번: 조합 0의 개수 [C++] (0) | 2021.05.06 |