[C++ / 1874] 스택 수열

2023. 7. 11. 21:58·알고리즘/백준
728x90

문제

 

1874번: 스택 수열

1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다.

www.acmicpc.net


문제 설명

스택의 특성에 따라 수열을 만들 것이다.

하지만 이 수열에 push 하는 순서는 반드시 오름차순을 지켜야 한다.

임의의 수열이 주어졌을 때 스택을 이용해 그 수열을 만들 수 있는지 없는지 판단하고, 어떤 순서로 push와 pop을 수행해야 하는지 알아내라.


풀이 방식

우선 문제의 이해가 조금 어려웠다.

예시를 들어 설명하자면, 예제의 size가 8인 스택에 수열을 push한다고 치자.

이때 4,3,6,8,7,5,2,1 이 순서대로 값을 입력할 것인데, 이때의 출력값이 + + + + - - + + - + + - - - - - 이고 작동원리는 다음과 같다.

 

우선 첫 입력값이 4이므로 스택에는 1, 2, 3, 4가 순서대로 값이 입력되고 4를 pop 해준다. 그래서 + + + + - 이다.

두번째 입력값은 3이다. 이때 스택에 1, 2, 3이 이미 들어가 있음으로 stack의 Top은 3이다.

그렇기에 값의 추가는 없고 3을 pop 해주기 때문에 - 이다.

세번째 입력값은 6이다. 스택에 1, 2가 들어가있고 4까지는 입력되었음으로, 5, 6을 추가적으로 스택에 넣은 뒤, 6을 pop 해준다.

그럼으로 6까지의 총 결과는 + + + + - - + + - 이다.

 

이런 규칙을 가지는 알고리즘을 구현하면 된다.


솔루션

#include <iostream>
#include <stack>
#include <vector>

using namespace std;
int main()
{
  ios_base::sync_with_stdio(0);
  cin.tie(0);

  stack<int> s;
  vector<char> result;

  int cur = 1;
  int n;
  cin >> n;

  for (int i = 0; i < n; i++)
  {
    int data;
    cin >> data;

    while (cur <= data)
    {
      s.push(cur);
      cur += 1;
      result.push_back('+');
    }

    if (s.top() == data)
    {
      s.pop();
      result.push_back('-');
    }

    else
    {
      cout << "NO";
      return 0;
    }
  }

  for (int i = 0; i < result.size(); i++)
  {
    cout << result[i] << '\n';
  }
}
저작자표시 (새창열림)

'알고리즘 > 백준' 카테고리의 다른 글

[C++ / 2563] 색종이  (1) 2023.07.16
[C++ / 11053] 가장 긴 증가하는 부분 수열  (0) 2023.07.15
[C++ / 15666] N과 M (12)  (0) 2023.07.14
[C++ / 1181] 단어 정렬  (0) 2023.07.13
[C++ / 3085] 사탕 게임  (0) 2023.07.12
'알고리즘/백준' 카테고리의 다른 글
  • [C++ / 11053] 가장 긴 증가하는 부분 수열
  • [C++ / 15666] N과 M (12)
  • [C++ / 1181] 단어 정렬
  • [C++ / 3085] 사탕 게임
기짜낭
기짜낭
생각이 많지만, 지금 내가 해야할 것을 하자.
  • 기짜낭
    So tired
    기짜낭
    • 분류 전체보기 (199)
      • 개발 (11)
        • Javascript (19)
        • Typescript (5)
        • Canvas (8)
        • React (13)
        • C (3)
      • 활동 (63)
        • 개인 프로젝트 (33)
        • 나눔 서포터즈 3기 (9)
        • 멋쟁이 사자처럼 (7)
        • 0&1 C++ 자료구조 스터디 (0)
        • 제 9회 창업 아이디어톤 (3)
        • Poom (ZeroWasteShop) (3)
        • 해커톤 (2)
        • 우테코 프리코스 7기 (6)
      • 알고리즘 (27)
        • 알고리즘 정리 (5)
        • 백준 (18)
        • 프로그래머스 (4)
      • 강연 (7)
      • 독서 (18)
      • 회고 & 생각 (16)
        • 연간회고 (4)
      • 기타 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • ※ 예전 블로그
  • 인기 글

  • 태그

    CSS
    1주 1권
    Javascript
    백준
    HTML
    독후감
    한양대학교
    개발자
    3기
    프로젝트
    군대
    타입스크립트
    tutorial
    ES6
    프로그래밍
    개발
    대학
    1주에 1권씩
    디자인
    canvas
    react
    개념
    에리카
    알고리즘
    TypeScript
    우테코
    HTML5
    Erica
    프론트엔드
    독서
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
기짜낭
[C++ / 1874] 스택 수열
상단으로

티스토리툴바