Algorithm

[Python / C++] 스택 수열

KOOCCI 2019. 5. 23. 03:10

[참고 문제 : https://www.acmicpc.net/problem/1874]


Target으로 들어오는 값이 현재 보고있는 오름차수 숫자 값과 같거나 더 크면 계속해서 스택에 쌓인다.

더 이상 스택에 쌓일 수 없을 때도 Target이 스택의 Top과 다르면, 뽑을 수 없는 수가 되고,

항상 마지막에는 Pop을 통해 최상위 값을 빼낸다. (Target이거나, 스택에 들어있을 것이므로)

 

N = int(input())

stk = list()
result = list()

cnt = 1
resultCnt = 0

while resultCnt < 2 * N:
  target = int(input())

  while cnt <= target:
    stk.append(cnt)
    cnt += 1
    result.append('+')
    resultCnt += 1

  if stk[-1] != target:
    print("NO")
    exit()

  stk.pop(-1)
  result.append('-')
  resultCnt += 1

for i in result:
  print(i)

 

#include <cstdio>
#include <stack>

using namespace std;

int main(){
    int N;
    stack<int> stk;
    scanf("%d", &N);

    char* arr = new char[2*N];

    int cnt = 1, target, resultCnt = 0;

    while(resultCnt < 2*N){
        scanf("%d", &target);

        while(cnt <= target){
            stk.push(cnt++);
            arr[resultCnt++] = '+';
        }

        if(stk.top() != target){
            printf("NO");
            return 0;
        }
        stk.pop();
        arr[resultCnt++] = '-';
    }

    for(int i = 0; i < resultCnt; i++){
        printf("%c\n", arr[i]);
    }

    return 0;
}

'Algorithm' 카테고리의 다른 글

[java] Rotate Array  (0) 2022.06.24
[java] Median of Two Sorted Arrays  (0) 2022.06.23
[java] Longest Substring Without Repeating Characters  (0) 2022.06.23
[java] jump game 2  (0) 2022.06.22
[Python] 소수 찾기  (0) 2019.05.23