[Python]백준 BaekJoon.AC 10828 : 스택(deque, try-except)
https://www.acmicpc.net/problem/10828
10828번: 스택
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
경우의 수가 많기 때문에 switch문을 사용하면 좋겠지만 파이썬에선 그런 구문이 없다.
하지만 if문의 능력범주가 넓고 이용하기 쉽기 때문에 크게 문제되지 않는 것 같다.
우선 한 줄씩 입력받아 그 라인을 split해 리스트에 저장해주고,
if문을 이용해 명령어에 따라 나눠지게 만들었다.
먄악 추가적인 정보가 필요한 명령어라면 아까 저장한 리스트 옆칸엔 반드시 정보가 들어있을 테고,
이를 적절히 이용해 요구된 조건을 만족시켜준다.
이때 try-except문을 사용한 이유는 pop()때문이다.
가장 위에 있는 스택값을 출력하되, 만약 스택에 값이 존재하지 않다면 -1을 출력해줘야 하는 조건이 있다.
스택값을 출력하기 위해선 pop을 이용해 스택값을 가져와야 하는데, 만약 스택이 비어있으면 에러가 발생한다.
이를 위해선 먼저 스택값이 있는지 확인해야 한다.
우선 pop()을 실행해버리고, 만약 스택이 비어 오류가 발생한다면 -1을 출력해주는거다.
if문 같은 구문으로 확인하는게 일반적이긴 하나,
if문은 많이 사용해보기도 했고 try-except문을 이용해 풀어보는 것도 좋을 것 같았다.
어려운 구동은 아니었지만 순조롭게 작동돼 좋다.
import sys
from collections import deque
N = int(input())
deq = deque()
for i in range(N):
string = sys.stdin.readline().split()
if string[0] == "push":
deq.append(int(string[1]))
elif string[0] == "pop":
try:
print(deq.pop())
except:
print(-1)
elif string[0] == "size":
print(len(deq))
elif string[0] == "empty":
if deq:
print(0)8
else:
print(1)
elif string[0] == "top":
try:
p = deq.pop()
print(p)
deq.append(p)
except:
print(-1)
+)앞서 글을 모두 작성해 완료 버튼을 눌렀지만 사진 빼고 글이 전부 날아간 상태로 업로드가 돼 다시 작성했다.
그래서 원래만큼의 설명을 다시 재현해내지 못한 것 같다.. 같은 내용을 두 번 쓰려니 기억도 안나고 황당하고..
처음 있는 일은 아니라 내부적인 오류인가 싶고.. 기운이 빠지고 그렇다..ㅋㅋ 임시저장 할 길이의 글도 아닌데도 앞으론 저장 해가며 써야겠다