10845 - 큐
2167 문제 링크
접근법
class 를 생성하고 push,pop,size … 과 같은 함수를 구현했다. 이때 front와 back을 가르키고있는 nfront,nback을 만들었다. 둘다 처음에는 0번째 배열을 가르키고 있고 nfront는 pop을 하고난 뒤 +1 이되고 nback은 push를 한뒤 +1이 된다. nfront와 nback이 같으면 empty가 참이고 front와 back은 각각 nfront 번째 배열 값과 nback 번째 배열 값을 출력하면된다.
#include <iostream>
#include <string>
using namespace std;
class Queue{
int Q_array[10001];
public:
int nfront;
int nback;
void push(int x);
void pop();
void size();
void empty();
void front();
void back();
Queue(){
nfront =0;
nback = 0;
}
};
void Queue::push(int x)
{
Q_array[nback] = x;
nback+=1;
}
void Queue::pop()
{
if(nfront == nback)
{
printf("-1\n");
}else
{
printf("%d\n", Q_array[nfront]);
nfront+=1;
}
}
void Queue::size()
{
printf("%d\n",(nback - nfront));
}
void Queue::empty()
{
if(nfront == nback)
{
printf("1\n");
}else
{
printf("0\n");
}
}
void Queue::front()
{
if(nfront == nback)
{
printf("-1\n");
}else
{
printf("%d\n",Q_array[nfront]);
}
}
void Queue::back()
{
if(nfront == nback)
{
printf("-1\n");
}else
{
printf("%d\n",Q_array[nback-1]);
}
}
int main(int argc, char *argv[])
{
int N=0;
int x;
scanf("%d",&N);
string check;
Queue Q = Queue();
for(int i=0; i<N; i++)
{
cin >> check;
if(check == "push")
{
scanf("%d",&x);
Q.push(x);
}else if(check == "front")
{
Q.front();
}else if(check == "back")
{
Q.back();
}else if(check == "size")
{
Q.size();
}else if(check == "empty")
{
Q.empty();
}else if(check == "pop")
{
Q.pop();
}
}
return 0;
}
결론
큐의 개념을 알고 있다면 구현하는데 큰 어려움이 없을거라고 생각한다