728x90
[Data Strucutre/Queues/Medium]
https://www.hackerrank.com/challenges/queue-using-two-stacks/problem
#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 |