https://www.acmicpc.net/problem/1874
문제
1이상 n(1<=n<=100,000)이하의 정수가 순서대로 주어진다. 스택에 push하는 순서는 반드시 오름차순을 지킨다고 할 때, 주어진 수열을 만들 수 있으면 연산을 출력하고, 불가능한 경우 "NO"를 출력한다.
풀이
스택에 직접 오름차순으로 수를 push하고 현재 인덱스 값과 스택 top이 같은 경우 pop한다. 연산 과정은 벡터에 저장한다.\
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
int n, arr[100010], idx = 1;
stack<int> s;
vector<char> v;
int main() {
cin >> n;
for (int i = 0; i < n; i++) cin >> arr[i];
for (int i = 0; i < n; i++) {
if (idx <= arr[i]) {
while (idx <= arr[i]) {
s.push(idx++);
v.push_back('+');
}
}
if (s.top() == arr[i]) {
s.pop();
v.push_back('-');
}
else {
cout << "NO";
return 0;
}
}
for (int i = 0; i < v.size(); i++) cout << v[i] << '\n';
}
'Koala - 15기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[백준/Python] 16401번: 과자 나눠주기 (0) | 2024.07.25 |
---|---|
[백준/Python] #27496 발머의 피크 이론 (0) | 2024.07.25 |
[백준/c++] 1021번: 회전하는 큐 (0) | 2024.07.22 |
[백준/Python3] 14465번 : 소가 길을 건너간 이유 5 (0) | 2024.07.21 |
[백준/Java]-먹을 것인가 먹힐 것인가 (0) | 2024.07.21 |