본문 바로가기
코테/백준

[백준] 1874 스택 수열 - C++

by gayoungeeda 2023. 7. 29.
728x90

https://www.acmicpc.net/problem/1874

 

문제 설명


문제 풀이

#include<stdio.h>
#include<stdlib.h>
#include<vector>
#include<algorithm>
using namespace std;
vector <char> answer;
int stack[100001], num[100001], chk[100001];
int main()
{
    int i, n, key = -1, cnt = 1, stop = 0;
    scanf("%d", &n);

    for(i = 1; i <= n; i++) {
        scanf("%d", &num[i]);
    }

    i = 1;
    while(cnt <= n) {
        if(key == -1 || stack[key] < num[cnt]) {
            answer.push_back('+');
            stack[++key] = i++;
        }
        else {
            if(stack[key] == num[cnt]) {
                cnt++;
                chk[stack[key]]++;
            }
            answer.push_back('-');
            if(chk[stack[key]] == 0) {
                printf("NO");
                exit(0);
            }
            key--;
        }
    }

    for(i = 0; i < answer.size(); i++) {
        printf("%c\n", answer[i]);
    }

    return 0;
}

처음에는 while문을 돌면서 한 줄씩 출력을 뽑으려고 했는데 수열이 성립하지 않을 경우를 while문 이전에 거를 수가 없을 것 같아서 생각을 바꿨다.

'코테 > 백준' 카테고리의 다른 글

[백준] 1149 RGB거리 - C++  (0) 2023.07.29
[백준] 11659 구간 합 구하기 4 - C++  (0) 2023.07.29
[백준] 10773 제로 - C++  (0) 2023.07.29
[백준] 2606 바이러스 - C++  (0) 2023.07.28
[백준] 9461 파도반 수열 - C++  (0) 2023.07.28