#include <bits/stdc++.h>
using namespace std;
// 연산(+, -)을 저장할 vector
vector<char> result;
// 목표 배열을 저장할 vector
vector<int> target;
// 목표 배열을 위해 거쳐갈 stack
stack<int> s;
// s_num : stack에 들어갔다가 나올 숫자
// flag : 오답인 경우를 위한 신호 변수
int N, s_num, flag;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> N;
// vector을 초기화 하고 입력 받기
target.assign(N, 0);
for(int n = 0; n < N; n++)
cin >> target[n];
// stack을 거쳐갈 숫자는 1부터
s_num = 1;
// 목표 배열을 하나 씩 완성하는 반복문
for(int t : target)
{
// s_num이 t가 될 때 까지 계속 result stack에 쌓임
while(s_num <= t)
{
result.push_back('+');
s.push(s_num++);
}
// 맨 위의 값 == 목표 배열의 한 원소 값
if(s.top() == t)
{
result.push_back('-');
s.pop();
}
// 목표 배열을 만들 수 없는 경우
else
{
flag = 1;
break;
}
}
// 목표 배열을 만들 수 없는 경우
if(flag == 1)
cout << "NO";
// 목표 배열을 만들기 까지 저장한 연산(+, -) vector 출력
else
{
for(char c : result)
cout << c << "\n";
}
return 0;
}
댓글