백준 - 2161 카드1

요약
- N을 입력받아 카드 N개를 1번카드가 제일위에 N번카드가 제일 아래인 순서대로 배열
- 위 순서대로 진행함
- 맨 위의 카드를 버림
- 그아래 카드를 맨 아래의 카드밑으로 옮김
- 이와 같이 진행했을때, 버린 카드를 순서대로 출력하시오.
아이디어
- N개의 배열을 저장할 자료구조를 골라야함.
- 배열 : 배열을 N개 생성후 배열에 넣었다면, 인덱스의 제거와 이동이 잦음 → 적합하지 x
- 스택 : 삽입과 제거연산이 모드 최상위 노드 한쪽에서만 이뤄짐 → 양 사이드로 제거 삽입이 일어나는 위의 문제에는 적합하지 x
- 큐 : 제거(Dequeu)는 전단, 삽입(Enqueue)은 후단에서 수행됨 → 적합
- 큰 틀을 모델링
- 큐전체를 입력받음
- 전단을 출력 → 전단을 제거 → 전단을 삽입(후단으로) → 전단을 제거
- queue가 empty가 될때까지 위를 반복함
코드작성
#include <iostream>
#include <queue>
using namespace std;
queue <int> q;//queue 선언
int main()
{
int n;
cin>>n;
for(int i=1; i<=n;i++){
q.push(i);//queue에 1부터 n까지 숫자 삽입
}
while(!q.empty()){
cout<<q.front();//전단 출력
q.pop();//전단 팝
q.push(q.front());//전담을 후단으로 삽입
q.pop();//전단팝
if(q.empty()){
break;
}//space를 위한 예외처리
else{cout<<" ";}
}
return 0;
}