Programming/C C++

Queue using Two Stacks

728x90

[Data Strucutre/Queues/Medium]

https://www.hackerrank.com/challenges/queue-using-two-stacks/problem

 

Queue using Two Stacks | HackerRank

Create a queue data structure using two stacks.

www.hackerrank.com

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {
    int count;
    scanf("%d", &count);

    int *n_queue = malloc(sizeof(int)*count);
    int *p_queue = malloc(sizeof(int)*count);
    int top=0, rear=-1, index=0;
    int i=0;
    int type=0;
    while(i<count){
        int num=0;
        scanf("%d",&type);
        switch(type){
            case 1:
                scanf("%d", &num);
                n_queue[++rear]=num;
                break;
            case 2:
                ++top;
                break;
            case 3:
                p_queue[index++]=n_queue[top];
        }
        i++;
    }
    for(i=0;i<index;i++){
        printf("%d\n", p_queue[i]);
    }
    /* Enter your code here. Read input from STDIN. Print output to STDOUT */    
    return 0;
}

가장 먼저 몇 번 입력을 받을 것인지 count를 입력받는다.

입력받은 count 만큼 queue에 메모리를 할당해준다. 이 때 n_queue가 전체 입력받는 값들이 저장될 queue이고, p_queue는 3번을 입력받았을 때 출력할 값들을 저장할 배열(queue)이다.

각 queue의 F 앞부분과 L 뒷부분을 나타내는 변수 top, rear를 선언하고 각각 0과 -1로 초기화한다.

1번 타입을 입력받았을 때에는 queue에 추가할 값을 추가적으로 입력받도록 한다. 그리고 queue는 입력받는 값들이 뒤에 붙으므로 ++rear로, 현재 채워져있는 마지막 인덱스인 rear 다음 인덱스(++rear)에 값을 저장하도록 한다.

2번 타입을 선택했을 때에는 가장 윗 부분을 가리키는(처음을 가리키는) top의 값을 1증가시켜 현재의 top값을 queue에서 꺼낸 것처럼 느껴지게 한다.

3번 타입을 선택했을 때에는 p_queue에 현재 가장 위의 값(처음 값)을 저장한다.

SMALL

'Programming > C C++' 카테고리의 다른 글

Maximum Element  (0) 2020.07.13
Bon Appetit  (0) 2020.07.12
Mini-Max Sum  (0) 2020.06.14
Merge two sorted linked lists  (0) 2020.06.08
Balanced Brackets  (0) 2020.06.07