728x90
반응형
🔗 문제 링크
https://www.acmicpc.net/problem/1874
반응형
728x90
👩💻 코드
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N;
cin >> N;
vector<int> A(N, 0);
vector<char> answer;
stack<int> stk;
int num = 1;
for (int i=0; i<N; i++){
cin >> A[i];
}
for (int i=0; i<N; i++){
int a = A[i];
if(a >= num){
while (a >= num){
stk.push(num++);
answer.push_back('+');
}
stk.pop();
answer.push_back('-');
}else{
int t = stk.top();
stk.pop();
if(t > a){
cout << "NO";
return 0;
}else{
answer.push_back('-');
}
}
}
for(int i=0; i<answer.size(); i++){
cout << answer[i] << "\n";
}
return 0;
}
📝 풀이
Do it! 알고리즘 코딩테스 - C++ 편 : 기출 유형 분석부터 문제 풀이 비법까지!를 참고하였습니다.
현재 수열의 수가 스택에 저장할 수보다 크다면 스택에 현재 수열의 수까지 push 합니다.push가 끝나면 수열을 출력하기 위해 pop을 한 번 합니다.
현재 수열의 수가 스택에 저장할 수보다 작으면 스택에서 pop 합니다.만약 스택위 top이 수열의 수보다 크다면 수열을 출력할 수 없으므로 "NO"를 출력하고 return 합니다.
최종적으로 수열을 만들기 위한 연산이 들어 있는 answer을 출력해줍니다.
728x90
반응형
'코딩테스트 > 백준' 카테고리의 다른 글
[백준] 2164번: 카드2 (2) | 2024.09.07 |
---|---|
[백준] 17298번 : 오큰수 (0) | 2024.09.06 |
[백준] 11003번 : 최솟값 찾기 (1) | 2024.09.06 |
[백준] 12891번 : DNA 비밀번호 (0) | 2024.09.05 |
[백준] 1253번 : 좋다 (1) | 2024.03.04 |