코딩고치

[백준][자료구조]오큰수 본문

백준 알고리즘 기초/자료구조

[백준][자료구조]오큰수

코딩고치 2019. 9. 8. 02:25

for문을 중첩하여 문제에서 정의한 오큰수를 큐를 이용하여 입출력하도록 코드를 작성하니 시간 초과.. 그래서 스택에 수열의 인덱스를 입력하여 조건에 맞게 출력하도록 코드를 작성하였다.

#include <iostream>
#include <vector>
#include <stack>
using namespace std;

int main(void)
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	int n;
	cin >> n;

	stack<int> s;
	vector<int> vs(n); // 수열 입력 벡터
	vector<int> vr(n); // 오큰수 입력 벡터

	for (int i = 0; i < n; i++)
	{
		cin >> vs[i];//수열 입력
	}
	
	s.push(0);

	for (int i = 1; i < n; i++)
	{
		if (vs[i-1] > vs[i]) //이전 숫자가 더 크면 인덱스 push
			s.push(i);
		else
		{
			while (!s.empty() && vs[s.top()] < vs[i]) //s.top()(인덱스)를 이용하여 현재 숫자와 비교
			{
				vr[s.top()] = vs[i];
				s.pop();
			}
			s.push(i); 	//다음 숫자와 비교하기 위해
		}
	}
	while (!s.empty())	//오큰수가 없는 수의 인덱스 가장 마지막 수의 인덱스
	{		
		vr[s.top()] = -1;
		s.pop();
	}

	for (int i = 0; i < n; i++)
		cout << vr[i] << ' ';
	return 0;
}

 

 

Comments