<문제>
<소스코드>
import sys n = int(input()) stack = [] for i in range(n): command = sys.stdin.readline().strip() if command.split()[0] == 'push': stack.append(command.split()[1]) elif command == 'top': if not stack: print('-1') else: print(stack[-1]) elif command == 'size': print(len(stack)) elif command == 'pop': if not stack: print('-1') else: print(stack[-1]) stack.pop() elif command == 'empty': if not stack: print('1') else: print('0')
<NOTE>
1. 데이터 입력 받기
보통 데이터를 입력 받을 때 input()으로 받지만 입력의 개수가 많은 경우, 반복문으로 여러줄을 input()으로 받으면 시간초과가 발생할 수 있다. 이때 sys.stdin.readline()을 사용하면 빠른 속도로 데이터를 받을 수 있다.
2. 공백 및 개행문자 제거
rstrip()은 문자열 오른쪽 끝에있는 공백이나 개행문자를 제거한다. input()이든 sys.stdin.readline()이든 한 줄의 문자열 단위로 입력을 받으므로 개행문자가 포함되어있다. 따라서 rstrip()을 통해 제거해주었다. input().split() 또는 sys.stdin.readline().split()을 하면 문자열내의 공백을 기준으로 split되어 리스트에 저장되고 문자열 끝의 공백이나 개행문자는 제거된다.
3. 입력받을 때 split()을 하지 않은 이유
이 문제에서 command를 sys.stdin.readline().split()으로 받지 않은 이유는 push를 제외한 다른 명령어는 split()할 필요가 없기 때문에, push명령어에서만 split()을 해주기 위해서이다. 만약 sys.stidn.readline().split()으로 받으면 모든 명령어에 접근할 때 리스트의 원소로 접근해야하기 때문이다. ex) command[0] == 'size'
4. 빈 리스트 조건문
'리스트가 비어있으면'이라는 조건문은 if not 리스트: 로 작성할 수 있다.
if not stack:
아래와 같이 리스트 길이로 리스트가 비어있는지를 확인하는 것은 권장하지 않는다.
if len(stack) == 0:
'알고리즘 > 스택 \ 큐 \ 덱' 카테고리의 다른 글
#12 [파이썬] 백준 7785번 문제: 회사에 있는 사람 (0) | 2021.04.13 |
---|---|
#11 [파이썬] 백준 2841번 문제: 외계인의 기타 연주 (0) | 2021.04.13 |
#10 [파이썬] 백준 4949번 문제: 균형잡힌 세상 (0) | 2021.04.07 |
#9 [파이썬] 백준 9012번 문제: 괄호 (0) | 2021.04.07 |
#8 [파이썬] 백준 10845번 문제: 큐 (0) | 2021.04.07 |
댓글