[백준] 10828번 - 스택
💡문제 분석 요약
-- 문제 --
입력 : 1 ≤ N ≤ 10,000
push X: 정수 X를 스택에 넣는 연산이다.
pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
size: 스택에 들어있는 정수의 개수를 출력한다.
empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
💡알고리즘 설계
input을 통해 N을 입력받는다.
각 명령어에 해당하는 함수를 만든다.
호출한다.
💡코드
N = input()
def check_empty(stack):
return len(stack) == 0
def push(stack, item):
stack.append(item)
print("pushed item :" + item)
def pop(stack):
if(check_empty(stack)):
return "empty"
return stack.pop()
stack = []
push(stack,N)
💡시간복잡도
O(1)
💡틀린 이유
접근 방식이 완전히 틀렸다.
문제의 조건을 구현하는 능력이 떨어진다.
💡틀린 부분 수정 or 다른 풀이
import sys
x = int(sys.stdin.readline())
# 파이썬에서 스택 사용하는 방법
stack = []
# 입력 받은 값 처리
for i in range(x):
s = sys.stdin.readline().split( )
if s[0] =='push':
stack.append(s[1])
elif s[0] =='pop':
if len(stack) > 0: print(stack.pop())
else: print(-1)
elif s[0] == 'size':
print(len(stack))
elif s[0] == 'empty':
if len(stack) == 0: print(1)
else: print(0)
elif s[0] == 'top':
if len(stack)>0: print(stack[-1])
else: print(-1)
💡느낀점 or 기억 할 정보
처음 코테를 접하다보니 접근하는데 어려움을 느낌. -> 문제 많이 접해보기.
개념만 공부하지 말고 기본 구현한 코드 많이 접해보기.
sys.stdin.readline() : 한 줄의 입력을 읽고 그 결과를 문자열로 반환한다.
input() : 반복문으로 여러 줄 입력 받아야 될 때 시간 초과 가능성 존재
'split'을 통해 push 1 일 때 s[0] = push로 나눌 수 있다.