www.acmicpc.net/problem/10845

 

10845번: 큐

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.

www.acmicpc.net

#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;

int main(void)
{
  vector<int> v;

  int n = 0;
  int pushData = 0;
  char s[6];

  scanf("%d",&n);
  for(int i = 0 ; i < n ; i++)
  {
    scanf("%s", s);
    // pop 일 경우 맨 앞 원소 출력 후 삭제해줌
    if(!strcmp(s, "pop"))
    {
      printf("%d\n", v.size() == 0 ? -1 : v.front());
      if(v.size()) v.erase(v.begin());
    }
    // size 일 경우 벡터의 사이즈 출력
    else if(!strcmp(s, "size"))
    {
      printf("%lu\n", v.size());
    }
    // empty 는 벡터의 사이즈 기준으로 판단, empty() 도 있음
    else if(!strcmp(s, "empty"))
    {
      printf("%d\n", v.size() == 0 ? 1 : 0);
    }
    else if(!strcmp(s, "front"))
    {
      printf("%d\n", v.size() == 0 ? -1 : v.front());
    }
    else if(!strcmp(s, "back"))
    {
      printf("%d\n", v.size() == 0 ? -1 : v.back());
    }
    // push 일 경우 정수 하나를 더 입력받아서 벡터의 맨 뒤에 넣어준다
    else
    {
      scanf("%d",&pushData);
      v.push_back(pushData);
    }
  }
}

[Try]

1. 성공

 

[Point]

1. 적절한 자료구조 선택, stl 에 있던 덱도 사용해 볼 수 있었다.

2. 벡터 사이즈 반환형이 long unsigned int 라 출력 포맷을 lu 로 해야한다.

3. string 클래스를 scanf 로 받아보려 .c_str() 을 사용해봤는데, 경고가 떠서 그냥 c스타일 문자열로 받았다.

4. c의 문자열비교와 string 의 문자열 비교 방법(연산자 오버로딩 ==)

 

[More]

1. 벡터 사용하지 말고 직접 만들어보기

2. 꼭 큐의 형태로 만들지 않고 배열로만도 구현은 가능한다. (8556609)

'PS > BOJ' 카테고리의 다른 글

[백준] 11866.cpp : 요세푸스 문제 0  (0) 2020.05.12
[백준] 10866.cpp : 덱  (0) 2020.05.12
[백준] 1065.py : 한수  (0) 2020.05.11
[백준] 4673.py : 셀프 넘버  (0) 2020.05.11
[백준] 13414.py : 수강신청  (0) 2020.05.11

+ Recent posts