알고리즘/코딩테스트 문제 정리
[99클럽] stack 구현
고래강이
2025. 2. 3. 14:14
🌈 문제 풀기 전 내 생각
1. 간단하게 stack에 대한 조건을 하나씩 구현해나가면 될 것 같다 문제를 잘 읽고 풀어보자.
소요 시간: 30분
☄️ 문제 풀이 코드
import sys
# stack 실버 4
def beginner():
N = int(input())
stack = []
for _ in range(N):
action = sys.stdin.readline().split()
if len(action) > 1:
_, value = action
stack.append(value)
elif 'top' in action:
print(stack[len(stack) - 1])
elif 'size' in action:
print(len(stack))
elif 'empty' in action:
print(int(len(stack) == 0))
else:
if len(stack) == 0:
print(-1)
else:
print(stack.pop())
print(stack)
beginner()
- 문제를 풀면서 2번의 에러를 만나게 되었는데 처음에는 RuntimeError(IndexError), 두번째는 출력 초과로 왜 이렇게 나왔는지 잘 몰랐지만 해결할 수 있었다. 처음에 의심했던 부분은 조건문 부분인데 'top' == action[0]이 부분을 "top" in action 이런식으로 조건을 만든 것과 input()으로 값을 가져올 때가 문제일 수도 있다 생각했지만 아니였다.
- 이후 코드를 분석하면서 top에서의 코드 중 stack[len(stack) - 1]에서 len(stack)일 때 0을 출력한 뒤 stack[-1]이면 문제가 생긴다는 것을 알게 되었다. 즉 값이 없는 배열에서 stack[-1]을 사용하면 indexError가 발생한다.
- 이후 출력초과는 어떤 부분에서 발생했는지 잘 모르겠지만 해당 사항을 고쳤더니 해결이 되었다.
☄️ 최종 결과 코드
import sys
def beginner():
N = int(sys.stdin.readline())
stack = []
for _ in range(N):
action = sys.stdin.readline().split()
if len(action) > 1: # push X
_, value = action
stack.append(value)
elif action[0] == 'top': # top
print(stack[-1] if stack else -1)
elif action[0] == 'size': # size
print(len(stack))
elif action[0] == 'empty': # empty
print(1 if not stack else 0)
elif action[0] == 'pop': # pop
print(stack.pop() if stack else -1)
beginner()
- 빈 배열은 Falsly한 값인데 이걸 자꾸 헷갈린다.
- python에서의 삼항 연산자 사용 방법을 알게되었다 (자주 애용할 듯)
- 값1 if 조건 else 값 2:True일 경우 값1을 False일 경우 값2를 출력