yon11b

[백준]1874번- 스택 수열 본문

언어/Python

[백준]1874번- 스택 수열

yon11b 2023. 1. 5. 00:55
반응형

N=int(input())

stack=[]
wantSeq=[]
seqIdx=0
PushPop=[]

flag=0

for i in range(N):
    wantSeq.append(int(input()))

for i in range(N):
    stack.append(i+1)
    PushPop.append('+')
    #print(stack[-1],wantSeq[seqIdx],seqIdx)
    if stack[-1]<wantSeq[seqIdx]:
        continue
    elif stack[-1]>wantSeq[seqIdx]:
        flag=-1
        break      
    while stack and stack[-1] == wantSeq[seqIdx]:
        stack.pop()
        PushPop.append('-')
        seqIdx=seqIdx+1
        #print(stack)
        if seqIdx==N and not stack:            
            flag=1
            break
    if flag==1:
        break
if stack:
    print("NO")    
else:
    for pp in PushPop:
        print(pp)

스택의 마지막 원소가 입력받은 수열배열(wantSeq)의 idx(초기값=0)의 원소와 같은지 검사.

같으면 pop으로 반환

  1. 스택 원소가 wantSeq idx원소보다 작다면 아직 그 수까지 도달하지 않은 것이므로 스택에 append하는 과정 다시 반복
  2. 스택 원소가 wantSeq idx 원소보다 크다면 맞는 수열을 생성할 수 없으므로 종료

for문을 다 돌고 나서 나왔는데 스택에 남아있는 원소가 있다면 수열을 제대로 생성하지 못했다는 뜻이므로 NO 출력.

스택에 남아있는 원소가 없다면 제대로 수열을 생성했다는 뜻. push,pop 순서대로 출력하자.

728x90

'언어 > Python' 카테고리의 다른 글

[백준]17626번-Four Squares  (0) 2023.03.17
[백준]2292번- 벌집  (0) 2022.12.30
[백준] 11050번- 이항 계수 1  (0) 2022.12.30