해당 문제는 아래 링크를 통해서 확인하실 수 있습니다!
https://www.acmicpc.net/problem/10828
이번 문제는 보자마자 쉽다! 예전에 공부했던 스택문제다 하면서 풀다가... 틀려버렸..!
코딩테스트는 그냥 파이썬으로 문제를 푸는중인데 이 문제는 파이썬 문법을 잘 몰라서 틀린게
가장 컸다..
문제
14
push 1
push 2
top
size
empty
pop
pop
pop
size
empty
pop
push 3
empty
top
2
2
0
2
1
-1
0
1
-1
0
3
일단 내가 짜본 코드를 먼저 넣어보면...
# 백준 10828: 스택
# https://www.acmicpc.net/problem/10828
# 내가풀은... 오답코드 ㅠㅠ
stack = []
result = []
N = int(input())
for i in range(N):
method = input()
if method.split(' ')[0] == 'push': # PUSH: 정수 X를 스택에 넣는 연산
stack.append(method.split(' ')[1])
else:
if method == 'pop': # POP: 스택에서 가장 위에 있는 정수를 출력. 스택에 들어있는 정수가 없으면 -1 출력
if len(stack) == 0: # 스택에 들어있는 정수가 없음
result.append(-1)
else:
popData = stack[len(stack) - 1]
stack.remove(popData) # 가장 위에있는 정수를 뺌
result.append(popData)
elif method == 'size': # SIZE: 스택에 들어있는 정수의 개수를 출력
result.append(len(stack))
elif method == 'empty': # EMPTY: 스택이 비어있으면 1, 아니면 0을 출력
if len(stack) == 0:
result.append(1)
else:
result.append(0)
elif method == 'top': # TOP: 스택의 가장 위에 있는 정수를 출력. 스택에 들어있는 정수가 없으면 -1 출력
if len(stack) == 0: # 스택에 들어있는 정수가 없음
result.append(-1)
else:
result.append(stack[len(stack) - 1])
for i in range(len(result)):
print(result[i], end = '\n')
코드도 복잡하게 작성했고 문법도 틀렸다...!
그거 외에도 놓친 부분이 있어서 회고를 해보자면?
- input()을 쓰면 시간초과가 발생할 수도 있다고 한다. 그래서 input 대신에 sys.stdin.readline을 사용해야겠다고 항상 생각을 하고있어야 한다!
- 파이썬에서는 stack을 제공하지 않는다. stack은 list로 구현할 수 있는데 pop할때 remove 메서드가 아닌 pop 메서드가 있더라.... 이걸 사용하면 되는걸..!
- list의 제일 위 원소를 나는 list[len(list)-1]로 뽑아왔는데 알고보니까 list[-1]로도 간단하게 가능했다!
잘못된 부분을 파악하고 다시.. 코드를 작성해봤다.
# 백준 10828: 스택
# https://www.acmicpc.net/problem/10828
"""
1. input()을 쓰면 시간초과가 발생할 수 있다. 그렇기 때문에 sys.stdin.readline 사용
2. 파이썬에서는 stack을 제공X -> list로 구현 가능 -> POP할때 array.pop 메서드가 있는걸 모르고 remove 사용
3. list의 제일 위 원소는 list[len(list)-1]로도 가능하지만 그냥 list[-1]도 가능하더라..!
"""
import sys
stack = []
N = int(sys.stdin.readline())
for _ in range(N):
method = sys.stdin.readline().split()
if method[0] == 'push':
stack.append(method[1])
elif method[0] == 'pop':
if len(stack) == 0:
print(-1)
else:
print(stack.pop())
elif method[0] == 'size':
print(len(stack))
elif method[0] == 'empty':
if len(stack) == 0:
print(1)
else:
print(0)
elif method[0] == 'top':
if len(stack) == 0:
print(-1)
else:
print(stack[-1])