본문 바로가기
백준

[백준] 1874번 : 스택 수열 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 8. 2.
728x90
반응형

 

 

1874번: 스택 수열

1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다.

www.acmicpc.net

 

1. 문제 설명

2. 풀이과정

  1. sys.stdin.readline() 함수를 사용하기 위해 sys 모듈을 불러온다. import sys
  2. 수열의 범위를 입력받는다. T = int(sys.stdin.readline())
  3. 현재 수열의 마지막 값을 저장할 변수를 생성하고 수열의 시작값인 1로 초기화한다. count = 1
  4. 수열을 만들 수 있는지 없는지 확인할 변수를 생성하고 True로 초기화한다. right = True
  5. 수열을 저장할 리스트를 생성한다. li = list()
  6. 수열을 만들기 위해 수행한 연산을 저장할 리스트를 생성한다. answer= list()
  7. 수열의 개수만큼 반복하며 for _ in range(T)
  8. 값을 입력받는다. num = int(sys.stdin.readline())
  9. 1부터 입력받은 값까지 수열 리스트에 추가하고 while (count <= num): li.append(count)
  10. 추가는 push 연산이므로 연산 리스트에 +를 추가한다. answer.append('+')
  11. 계속해서 다음 수열 값을 추가해야 하므로 수열 값을 1 증가시킨다. count += 1
  12. 만약 수열 리스트의 마지막 값이 입력한 값이면 if (li[-1] == num)
  13. 수열 리스트에서 해당 값을 삭제한다. li.pop()
  14. 삭제는 pop 연산이므로 연산 리스트에 -를 추가한다. answer.append('-')
  15. 반면에 수열 리스트의 마지막 값이 입력한 값이 아니면 else
  16. 해당 자료는 수열이 될 수 없다. 하여 NO를 출력하고 print('NO')
  17. 수열을 만들 수 없다고 판단한다. right = False
  18. 수열을 만들 수 없다고 판단되었으므로 종료한다. break
  19. 수열을 만들 수 있다면 if (right)
  20. 연산 리스트의 원소를 하나씩 출력한다. for i in answer: print(i)
반응형

3. 소스코드

import sys

T = int(sys.stdin.readline())

count = 1
right = True
li = list()
answer = list()

for _ in range(T):
    num = int(sys.stdin.readline())

    while (count <= num):
        li.append(count)
        answer.append('+')
        count += 1
        
    if (li[-1] == num):
        li.pop()
        answer.append('-')
    else:
        print('NO')
        right = False
        break

if (right):
    for i in answer:
        print(i)
728x90
반응형