2023. 9. 19. 23:55 자기개발/코딩테스트
C++ (코딩테스트) - 큐(백준)
문제
https://www.acmicpc.net/problem/10845
10845번: 큐
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
소스코드
#include <string>
#include <iostream>
using namespace std;
struct Node
{
Node* next = nullptr;
int value;
Node(int val)
{
this->value = val;
}
};
class Queue
{
private:
Node* start = nullptr;
Node* end = nullptr;
int size = 0;
public:
void Push(int val)
{
Node* newNode = new Node(val);
if (start == nullptr)
{
start = end = newNode;
}
else
{
end->next = newNode;
end = newNode;
}
size++;
}
int Pop()
{
if (size > 0)
{
int value = start->value;
Node* temp = start->next;
start = nullptr;
delete start;
start = temp;
size--;
return value;
}
return -1;
}
int Size()
{
return size;
}
int Empty()
{
if (size == 0) { return 1; }
return 0;
}
int Front()
{
if (size > 0) { return start->value; }
return -1;
}
int Back()
{
if (size > 0) { return end->value; }
return -1;
}
};
int main(void) {
int N;
Queue myQ;
string command;
int val;
cin >> N;
for (int i = 0; i < N; i++)
{
cin >> command;
if (command == "push")
{
cin >> val;
myQ.Push(val);
}
else if (command == "pop")
{
cout << myQ.Pop() << endl;
}
else if (command == "size")
{
cout << myQ.Size() << endl;
}
else if (command == "empty")
{
cout << myQ.Empty() << endl;
}
else if (command == "front")
{
cout << myQ.Front() << endl;
}
else if (command == "back")
{
cout << myQ.Back() << endl;
}
}
return 0;
}
큐를 사용 할 수 있었지만 만들어서 문제를 풀어보았다.
'자기개발 > 코딩테스트' 카테고리의 다른 글
C++ (코딩테스트) - 코코넛 그 두 번째 이야기(백준) (0) | 2023.09.22 |
---|---|
C++ (코딩테스트) - 스텍(백준) (0) | 2023.09.20 |
C++ (코딩테스트) - 회의실 배정(백준) (0) | 2023.09.19 |
C++ (코딩테스트) - 숫자 카드 나누기(프로그래머스) (0) | 2022.12.29 |
C++ (코딩테스트) - 우박수열 정적분(프로그래머스) (0) | 2022.12.28 |