백준 - 2161 카드1

AleXtep·2023년 3월 31일

백준

목록 보기
1/2

백준 - 2161 카드1

요약

  1. N을 입력받아 카드 N개를 1번카드가 제일위에 N번카드가 제일 아래인 순서대로 배열
  2. 위 순서대로 진행함
    1. 맨 위의 카드를 버림
    2. 그아래 카드를 맨 아래의 카드밑으로 옮김
  3. 이와 같이 진행했을때, 버린 카드를 순서대로 출력하시오.

아이디어

  1. N개의 배열을 저장할 자료구조를 골라야함.
    1. 배열 : 배열을 N개 생성후 배열에 넣었다면, 인덱스의 제거와 이동이 잦음 → 적합하지 x
    2. 스택 : 삽입과 제거연산이 모드 최상위 노드 한쪽에서만 이뤄짐 → 양 사이드로 제거 삽입이 일어나는 위의 문제에는 적합하지 x
    3. 큐 : 제거(Dequeu)는 전단, 삽입(Enqueue)은 후단에서 수행됨 → 적합
  2. 큰 틀을 모델링
    1. 큐전체를 입력받음
    2. 전단을 출력 → 전단을 제거 → 전단을 삽입(후단으로) → 전단을 제거
    3. 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;
}
profile
Full-Stack Developer

0개의 댓글