9716KB
, 348ms
#include <iostream>
#include <string>
#include <algorithm> // std::fill
using namespace std;
int main()
{
int N, num;
int front = 0, back = -1, arr[2000005];
std::fill(arr, arr + 2000005, -1);
ios_base ::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
string input, command;
cin >> N;
// 버퍼 비워주기
cin.ignore();
for (int i = 0; i < N; i++)
{
getline(cin, input);
if (input.length() >= 6) // push인 경우 확인하기 위해
{
command = input.substr(0, 4);
num = stoi(input.substr(5, input.length()));
back++;
arr[back] = num;
}
else
{
command = input;
if (command == "front")
{
cout << arr[front] << "\n";
}
else if (command == "back")
{
if (back == -1)
cout << -1 << endl;
else
cout << arr[back] << "\n";
}
else if (command == "size")
{
cout << back - front + 1 << "\n";
}
else if (command == "pop")
{
if (arr[front] == -1)
cout << -1 << "\n";
else
{
cout << arr[front] << "\n";
arr[front] = -1;
front++;
}
}
else if (command == "empty")
{
if (back - front + 1 == 0)
cout << 1 << "\n";
else
cout << 0 << "\n";
}
}
}
}
8416KB
, 396ms
#include <iostream>
#include <queue>
#include <string>
using namespace std;
int main() {
ios_base ::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N, num;
string command;
queue<int> q;
cin >> N;
for(int i=0;i<N;i++) {
cin >> command;
if(command == "push") {
cin >> num;
q.push(num);
} else {
if(command == "empty") {
cout << q.empty() << "\n";
} else if(command == "size") {
cout << q.size() << "\n";
} else if(q.empty()) { // -1 출력해야하는 경우들 출력
cout << -1 << "\n";
} else if (command == "front") {
cout << q.front() << "\n";
} else if(command == "back") {
cout << q.back() << "\n";
} else if(command == "pop") { // else로 하면 어떤 명령어인지 헷갈릴까봐 사용
cout << q.front() << "\n";
q.pop();
}
}
}
}
풀이: 오늘도 tony9402님의 오늘의 문제에 올라오길래 풀었던 문제다. 쉬운 문제라고 생각해서 queue
를 없이 풀려고 하다보니 조금 코드가 깔끔하지 않은 거 같다ㅠㅠ 문제를 풀기 위해서만 작성한 코드여서 그냥 최대 사이즈만큼의 배열을 만들고 front
, back
이라는 index
를 체크하는 변수를 만들어서 문제를 해결했다.
풀이: queue
를 사용해서 해결해보았다. 좀 더 코드가 짧아진 거 같아. 그리고 1번 방법으로 다른 사람들의 풀이를 한번 보려다가 참고한 코딩 공부 일지님의 글을 보고 cin
부분을 수정할 수 있었다. empty
인 부분을 좀 front
, back
, pop
에서 3번 반복하기 싫어서 먼저 if
문을 하나 더 만들어서 처리 했는데 가장 처음 if
에서
if(q.empty()){
if(command == "empty") {
cout << q.empty() << "\n";
} else cout << -1 << "\n";
}
이렇게 처리를 해줬어도 괜찮았을 거 같다.