본문 바로가기
알고리즘 문제풀이/백준

[백준 2493] 탑

by m2162003 2020. 11. 30.

www.acmicpc.net/problem/2493

 

2493번: 탑

첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1

www.acmicpc.net

스택을 사용하는 문제이다.

골5였지만 구현은 단순했다. 이전 문제와 마찬가지로 거꾸로 배열을 돌면서 현재값 < 스택의 탑이라면 push, 현재값 > 스택의 탑이라면 pop을 한다.

#include <stdio.h>
#include <stack>

using namespace std;

int n;
int arr[500000];
int res[500000];
stack<int> s;
int main(void)
{
  scanf("%d", &n);
  for (int i = 0; i < n; i++)
  {
    scanf("%d", &arr[i]);
  }
  s.push(n - 1);

  for (int i = n - 2; i > -1; i--)
  {

    if (arr[s.top()] > arr[i])
    {
      s.push(i);
    }
    else
    {
      while (!s.empty() && arr[s.top()] < arr[i])
      {
        res[s.top()] = i + 1;
        s.pop();
      }
      s.push(i);
    }
  }
  for (int i = 0; i < n; i++)
  {
    printf("%d ", res[i]);
  }
  return 0;
}

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

[백준 5427] 불  (0) 2020.12.03
[백준 9466] 텀 프로젝트  (0) 2020.12.03
[백준 6198] 옥상 정원 꾸미기  (0) 2020.11.30
[백준 4889] 안정적인 문자열  (0) 2020.11.29
[백준 5397] 키로거  (0) 2020.11.29

댓글