[백준] 1874 스택 수열

0

백준

목록 보기
192/271
post-thumbnail

[백준] 1874 스택 수열

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

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

	int n;
	cin >> n;
	
	vector<int> vec;
	for (int i = 0; i < n; ++i) {
		int input;
		cin >> input;
		vec.push_back(input);
	}

	int num = 1;
	stack <int> st;
	
	int idx = 0;
		
	bool possible = true;
	vector<char> output;

	while (idx < n) {
		while (st.empty() || st.top() < vec[idx]) {
			if (num > n) break;
			st.push(num);
			num++;
			output.push_back('+');
		}

		if (st.top() == vec[idx]) {
			st.pop();
			idx++;
			output.push_back('-');
		}
		else {
			possible = false;
			break;
		}
	}

	if (possible) {
		for (int i = 0; i < output.size(); ++i) {
			cout << output[i] << "\n";
		}
	}
	else cout << "NO";

	return 0;
}

1년 전 코드

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


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

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

	//스택에 들어가게 되는 숫자
	int num = 1;

	for (int i = 0; i < n; ++i) {
		int input;
		cin >> input;
		
		//스택 비어있는 경우 일단 숫자 하나 넣기
		if (s.empty()) {
			s.push(num);
			res.push_back('+');
			num++;
		}

		//입력된 수열과 스택의 top 비교

		if (input < s.top()) {
			cout << "NO";
			return 0;
		}

		while (input > s.top()) {
			s.push(num);
			res.push_back('+');
			num++;
		}

		if (input == s.top()) {
			s.pop();
			res.push_back('-');
		}
	}

	for (int i = 0; i < res.size(); ++i)
		cout << res[i] << "\n";

	return 0;
}

profile
Be able to be vulnerable, in search of truth

0개의 댓글