관리 메뉴

Mini

백준 2493 cpp // 스택 idea 발상, 초기예외 처리하는법 : 범위밖의 객체를 push하라 본문

Algorithm/스택

백준 2493 cpp // 스택 idea 발상, 초기예외 처리하는법 : 범위밖의 객체를 push하라

Mini_96 2023. 8. 17. 22:39

https://www.acmicpc.net/problem/2493

 

2493번: 탑

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

www.acmicpc.net

*의사코드 및 전체코드

#include <bits/stdc++.h>
using namespace std;

int n;
stack<pair<int, int>> s;	//높이,인덱스

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	/**
	* 1. 맨왼쪽에 {100,000,001 / idx 0} 의 탑이있다고 가정 => 0을 리턴하도록
	* 2. 나보다 작은 타워는 쓸모없음 -> 모두 pop 
	* 3. 내 좌측에는 나보다 큰 타워만남음 -> 그게 정답
	* 4. push
	*/
	cin >> n;
	s.push({ 100000001,0 });
	for (int i = 1; i <= n; ++i) {
		int height;
		cin >> height;
		
		while (height > s.top().first) {
			s.pop();
		}
		cout << s.top().second<<" ";

		s.push({ height,i });
	}
}