BOJ_10828 스택
- TOC {:toc}
이 글은 백준 온라인 저지의 10828번 문제를 파이썬(Python)으로 풀이한 것을 모아놓은 글입니다.
일종의 연습 기록이며 제가 정답을 받은 코드와 참고할만한 다른 코드를 같이 기록합니다. 필요한 경우 코드에 대한 해설을 기록합니다만 코드는 통과했어도 해설은 틀릴 수 있기 때문에 가볍게 참고해주시길 부탁드립니다. 피드백은 편하신 방법으로 자유롭게 주시면 감사하겠습니다.
2021.04.24
메모리 | 시간 | 코드 길이 |
---|---|---|
28776 KB | 76 ms | 384 B |
단계 | 시작 시각 | 끝난 시각 | 걸린 시간 |
---|---|---|---|
코딩 | 11:23:25 | 11:42:10 | |
디버깅 | 11:42:15 | 11:51:26 |
import sys
input = sys.stdin.readline
s = []
for _ in range(int(input())):
IN = input().split()
m = IN[0]
if m == "push":
s.append(int(IN[1]))
elif m == "pop":
print(s.pop()) if s else print(-1)
elif m == "size":
print(len(s))
elif m == "empty":
print(1) if not s else print(0)
else:
print(s[-1]) if s else print(-1)
디버그
- 처음에 그냥
input()
으로 입력을 받았더니 시간 초과가 났다.sys.stdin.readline
을 사용해서 해결하긴 했는데 슬슬 이걸로 입력을 받는 습관을 들이긴 해야겠다.
피드백
- 한 줄에 입력이 두 단어(e.g.,
push
)인 경우와 한 단어(그 외 전부)인 경우가 임의로 되는데 입력을 각 변수에 나눠서 받지 않고 리스트로 받은 뒤push
의 경우만1
번 원소에 접근하면 됐었다. - 명령어의 두 번째 글자까지 잘라서 (e.g.,
pu
forpush
) 경우를 비교하는 답안도 있었는데 딱히 필요할 것 같지는 않다. if else
문을print()
안에 넣어서print()
를 한 번만 사용해도 된다.- e.g.,
print(1 if not s else 0)
- e.g.,
참고 답안
import sys
input = sys.stdin.readline
s = []
for _ in range(int(input())):
m, *x = input().split()
if m == "push":
s.append(int(x[0]))
elif m == "pop":
print(s.pop()) if s else print(-1)
elif m == "size":
print(len(s))
elif m == "empty":
print(1) if not s else print(0)
else:
print(s[-1]) if s else print(-1)
아이디어 & 풀이
변수 x
앞에 *
를 붙여 split()
결과의 두 번째 원소부터 마지막 원소까지 x
에 저장한다.
split()
의 결과를 받는 두 번째 변수를*x
로 지정하면 입력값이 없어도 빈 리스트로 저장되기 때문에 에러가 발생하지 않는다.
-
ps-python