백준 - 18258 큐2

요리하는코더·2021년 12월 20일
0

알고리즘 - 문제

목록 보기
48/48
post-thumbnail
post-custom-banner

코드

  1. C++, queue 사용 x, 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";
      }
    }
  }
}
  1. C++, queue 사용, 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();
            }
        }
    }
}

풀이 및 소감

  1. 풀이: 오늘도 tony9402님의 오늘의 문제에 올라오길래 풀었던 문제다. 쉬운 문제라고 생각해서 queue를 없이 풀려고 하다보니 조금 코드가 깔끔하지 않은 거 같다ㅠㅠ 문제를 풀기 위해서만 작성한 코드여서 그냥 최대 사이즈만큼의 배열을 만들고 front, back이라는 index를 체크하는 변수를 만들어서 문제를 해결했다.

  2. 풀이: queue를 사용해서 해결해보았다. 좀 더 코드가 짧아진 거 같아. 그리고 1번 방법으로 다른 사람들의 풀이를 한번 보려다가 참고한 코딩 공부 일지님의 글을 보고 cin 부분을 수정할 수 있었다. empty인 부분을 좀 front, back, pop에서 3번 반복하기 싫어서 먼저 if문을 하나 더 만들어서 처리 했는데 가장 처음 if에서

if(q.empty()){
	if(command == "empty") {
		cout << q.empty() << "\n";
	} else cout << -1 << "\n";
}

이렇게 처리를 해줬어도 괜찮았을 거 같다.

참고 사이트

profile
요리 좋아하는 코린이
post-custom-banner

0개의 댓글