#include <iostream>
#include <vector>
using namespace std;
int main(){
vector <int> v;
int n;
int a;
int num[100001];
vector <char> ans;
cin >> n;
for(int i = 0; i< n; i++){
cin >> num[i];
}
int cnt = 0;
for(int i = 1; i <= n; i++){
v.push_back(i);
ans.push_back('+');
while(!v.empty() && v.back() == num[cnt]){
v.pop_back();
ans.push_back('-');
cnt++;
}
}
if(v.empty() == false) cout << "NO";
else{
for(int i = 0; i < ans.size(); i++){
cout << ans[i] << "\n";
}
}
return 0;
}
알게된 점
스택 알고리즘이 조금 복잡하긴 했지만 1~n까지를 넣고 수열과 같으면 빼는 식으로 하면 된다.
불가능한경우는 스택이 empty가 아닐경우 출력하면된다.
자꾸 시간초과가 돼서 왠지 살펴봤더니 endl 대신 '\n'을 사용하니까 맞았다.
그래서 endl과 '\n'의 차이를 찾아봤다.
버퍼를 비우는 std::endl 이 느리고, 비우지 않는 \n 이 빠르다. 굳이 즉시 출력해 줘야하는 게 아니라면, \n으로 모아뒀다가 출력하는 게 시간을 줄일 수 있다. 버퍼를 비우는 std::endl 이 느리고, 비우지 않는 \n 이 빠르다. 굳이 즉시 출력해 줘야하는 게 아니라면, \n으로 모아뒀다가 출력하는 게 시간을 줄일 수 있다.
'하루하나코딩' 카테고리의 다른 글
백준 9205 : 맥주 마시면서 걸어가기 c++ (0) | 2023.01.02 |
---|---|
백준 2644번 : 촌수계산 c++ (0) | 2022.12.31 |
백준 2667번 : 단지번호붙이기 c++ (0) | 2022.12.30 |
백준 2606번 : 바이러스 c++ (0) | 2022.12.29 |
백준 2178번 : 미로 탐색 c++ (0) | 2022.12.28 |