문제
문제에 대한 링크는 여기를 클릭해주세요.
문제 설명
N을 입력한 후 1부터 N까지의 숫자가 써있는 카드를 가지고 맨 위 카드를 버린뒤 그 다음 맨위의 카드는 맨 아래로 이동하는 행위를 반복합니다. 이후 마지막에 남은 카드를 출력하는 문제입니다.
풀이
C++ STL에 있는 queue를 사용하였습니다. for문을 사용하여 queue의 size가 1이 될때까지 반복하였습니다. queue를 pop함으로써 카드를 버리고 front의 있는 값을 push하고 pop을 함으로써 맨 뒤로 이동시켰습니다.
소스 코드
#include <iostream>
#include <queue>
using namespace std;
int main()
{
queue<int> q;
int N;
scanf("%d", &N);
for (int i = 1; i <= N; i++)
q.push(i);
for (int i = 0; q.size() != 1; i++)
{
if(i % 2 == 0)
q.pop();
else
{
q.push(q.front());
q.pop();
}
}
printf("%d\n", q.front());
return 0;
}
주의 사항
반복문을 사용할 시 i의 값이 N이 될 때까지가 아니라 queue의 사이즈가 1이 될 때까지임을 유의하여 코드를 작성해야 합니다.
'알고리즘 Algorithm > 백준 (BaekJoon)' 카테고리의 다른 글
백준 11866 : 요세푸스 문제 0 [C++] (0) | 2021.03.12 |
---|---|
백준 18258 : 큐 2 [C++] (0) | 2021.03.09 |
백준 17298 : 오큰수 [C++] (0) | 2021.02.13 |
백준 1874 : 스택 수열 [C++] (0) | 2021.02.12 |
백준 4949 : 균형잡힌 세상 [C++] (0) | 2021.02.12 |