백준 | 10828

justhaza.log·2023년 3월 28일

알고리즘: BOJ

목록 보기
1/125

문제

https://www.acmicpc.net/problem/10828

코드

import sys

N = int(sys.stdin.readline())
stack = []  # 정수 저장 스택

for _ in range(N):
    command = sys.stdin.readline().strip()
    
    if command[0:4] == "push":
        stack.append(command[5:])
    elif command == "pop":
        if stack:
            print(stack.pop())
        else:
            print(-1)
    elif command == "size":
        print(len(stack))
    elif command == "empty":
        if stack:
            print(0)
        else:
            print(1)
    elif command == "top":
        if stack:
            print(stack[-1])
        else:
            print(-1)

1)
처음에는 command를 str로 받아서 슬라이싱을 통해 명령어(push, pop 등)를 구분하려고 했다. 풀면서도 명령어의 길이가 다 다르고 push 같은 명령어는 원소도 같이 입력을 받기 때문에 애매한 구현이라고 생각을 하긴 했다.

다른 사람의 풀이를 찾아보고 아래와 같이 코드를 변경했다.
split() 메서드를 이용하면 command를 리스트로 받을 수 있고, 이때 모든 명령어에 대해 commad[0]는 그 명령어의 풀 네임이 된다. 좀 더 직관적인 코드라고 생각한다.

2)
스택이 비어있는 조건을

if stack:
	# statement

와 같이 구분했는데,

if len(stack) == 0:
	# statement

로 구현한 사람들이 더 많았다.

어쨌든 수정한 최종 코드는 다음과 같다.

import sys

N = int(sys.stdin.readline())

stack = []  # 정수 저장 스택

for _ in range(N):
    command = sys.stdin.readline().split()
    
    if command[0] == "push":
        stack.append(command[1])
    elif command[0] == "pop":
        if len(stack) == 0:
            print(-1)
        else:
            print(stack.pop())
    elif command[0] == "size":
        print(len(stack))
    elif command[0] == "empty":
        if len(stack) == 0:
            print(1)
        else:
            print(0)
    elif command[0] == "top":
        if len(stack) == 0:
            print(-1)
        else:
            print(stack[-1])

기타

https://velog.io/@yeseolee/Python-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%9E%85%EB%A0%A5-%EC%A0%95%EB%A6%ACsys.stdin.readline

profile
알고리즘이나 SQL 문제 풀이를 올리고 있습니다. 피드백 환영합니다!

0개의 댓글