➰ 취업준비/알고리즘 문제풀이

[Python][백준][1874] 스택 수열 (STACK)

 사과개발자 2021. 4. 1. 17:03

🍋 문제링크

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

🍉 Code

메모리 : 143944 KB

시간 : 32 ms

N = int(input())
arr=[]
result=[]
temp=[]

for _ in range(N):
    arr.append(int(input()))

j = 0
for i in range(1, N+1):
    temp.append(i)
    result.append('+')
    while (temp and temp[-1] == arr[j]):
        temp.pop()
        j += 1
        result.append('-')

if not temp: # 비어 있으면
    for i in result:
        print(i)
else:
    print("NO")

🥝 메모

문제 이해도 한참 걸림

→ N이 push되면 1, 2, 3, 4, 5, 6, ,,,,, N 이 순서대로 들어올 때 주어진 수열 (ex. 43687521) 이 순서대로 pop 되도록 만드는 것!

문제 접근 순서 ( j = 0 )

 

  1. 반복문을 사용하여 1 ~ N 까지 temp 배열에 push 를 하다가
  2. temp의 가장 마지막 숫자와 arr[j] 의 수와 같으면 pop → j++ 을 하면서 같지 않을때까지 반복
  3. result 배열 → push 할 때 '+', pop할 때 '-' 넣기
  4. 최종적으로 반복문이 끝났을 때 temp 배열이→ 비어있으면 result 배열의 원소를 줄바꿈을 사이에 두고 출력
  5. → 비어있지 않으면 수열을 만족시키지 못했다는 의미이므로 NO 출력

 

 

반응형