[BOJ] 10828: 스택

아이엠강욱·2023년 4월 25일
0

코딩테스트

목록 보기
4/23

해당 문제는 아래 링크를 통해서 확인하실 수 있습니다!
https://www.acmicpc.net/problem/10828


이번 문제는 보자마자 쉽다! 예전에 공부했던 스택문제다 하면서 풀다가... 틀려버렸..!
코딩테스트는 그냥 파이썬으로 문제를 푸는중인데 이 문제는 파이썬 문법을 잘 몰라서 틀린게 가장 컸다..

1. 문제 설명

문제

입력예시

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

2. 문제 리뷰 및 회고

일단 내가 짜본 코드를 먼저 넣어보면...

# 백준 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')

코드도 복잡하게 작성했고 문법도 틀렸다...!
그거 외에도 놓친 부분이 있어서 회고를 해보자면?

  1. input()을 쓰면 시간초과가 발생할 수도 있다고 한다. 그래서 input 대신에 sys.stdin.readline을 사용해야겠다고 항상 생각을 하고있어야 한다!
  2. 파이썬에서는 stack을 제공하지 않는다. stack은 list로 구현할 수 있는데 pop할때 remove 메서드가 아닌 pop 메서드가 있더라.... 이걸 사용하면 되는걸..!
  3. 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])
profile
블로그 이전했습니다!! https://dev-iamkanguk.tistory.com/ <<- 여기로 오세용!!

0개의 댓글