https://www.acmicpc.net/problem/10828
10828번: 스택
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
전체코드
import sys
class Stack():
def __init__(self):
self.stack = []
def push(self, x):
self.stack.append(x)
def pop(self):
if len(self.stack) == 0:
return "-1"
else:
return self.stack.pop()
def size(self):
return len(self.stack)
def empty(self):
if len(self.stack) == 0:
return True
else:
return False
def top(self):
if len(self.stack) == 0:
return "-1"
else:
return self.stack[-1]
N = int(sys.stdin.readline())
stack = Stack()
for i in range(N):
command = sys.stdin.readline().split()
if command[0] == "push":
stack.push(int(command[1]))
elif command[0] == "pop":
print(stack.pop())
elif command[0] == "size":
print(stack.size())
elif command[0] == "empty":
print(1 if stack.empty() else 0)
elif command[0] == "top":
print(stack.top())
풀이 설명
- 각 명령어를 입력받고 실행하기 위해 클래스에 메소드를 만들었음
- push 메소드의 경우 push X 명령어와 숫자(매개변수)를 같이 입력하기 때문에 split()로 입력을 받고 리스트를 활용한다.
- 다른 메소드의 경우는 값이 하나만 입력되기 때문에 [메소드, ] [1]의 값은 비어있는 상태이다.
- 그러므로 메소드를 구분하기 위한 문자열 비교는 [0]의 값과 진행하여야하고
- push의 경우 [0]으로 메소드를, [1]로 매개변수의 값을 가져온다.
- True, False 출력 => 삼항 연산자 활용
형식
조건이 참인 경우 값1 if 조건 else 값2
예
print(1 if stack.empty() else 0) // empty이면(true이면) 1을, false이면 0을 출력한다.
- 시간초과 문제 발생
input() 에서 시간초과가 일어날 수 있으므로 input()대신 sys.stdin.readline() 사용해줌
import sys
sys.stdin.readline()
스택은 배열, 리스트를 이용하여 구현할 수 있다.
스택 : 후입선출 (마지막에 들어온 것부터 나간다)
+ 큐는 c++에서는 queue를 제공하여주고, 파이썬에서는 리스트로 인덱싱하여 구현이 가능하다. (큐 : 선입선출)
'🖥️ 오늘의 백준' 카테고리의 다른 글
백준 18258번 : 큐 2 | 예외처리 [C++] (2) | 2023.05.10 |
---|---|
백준 9012번 : 괄호 [Python] (0) | 2023.05.09 |
백준 1620번 : 나는야 포켓몬 마스터 이다솜 | map [C++] (0) | 2023.05.08 |
백준 1021번 : 회전하는 큐 | queue, deque [C++] (0) | 2023.04.29 |
백준 1003번 : 피보나치 함수 | 메모이제이션, dp 알고리즘 [C++] (0) | 2023.04.28 |