jissue
SSUE's IT World
jissue
전체 방문자
오늘
어제
  • 분류 전체보기 (88)
    • CS (4)
    • 자료구조 (5)
    • 알고리즘 (30)
      • 백준 (28)
      • 프로그래머스 (2)
    • JAVA (0)
    • Spring Boot (0)
    • 가상화 (35)
      • VMware (23)
      • Docker (12)
    • sw 사관학교 정글 (13)
      • TIL (12)
    • 기타 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
jissue

SSUE's IT World

알고리즘/백준

[스택] 10828번 : 스택

2023. 3. 9. 19:47
  • 관리
  • 글쓰기
  • 로그인
  • 로그아웃

1. 출제 문제 

스택의 기본 개념에 대해 알아볼 수 있는 문제이다. 스택의 기본적인 구조를 익혀 보았다.

 

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

 

10828번: 스택

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

 


2. 조건 확인

 주어지는 명령어 N개에 대해 해당 작동을 수행한다. 

  • push X: 정수 X를 스택에 넣는 연산이다.
  • pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • size: 스택에 들어있는 정수의 개수를 출력한다.
  • empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
  • top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.

3. 접근 방법

  • push : 리스트.append()를 수행한다.
  • pop : len(리스트) != 0이라면 수, len(리스트) == 0이라면 -1을 수행한다.
  • size : len(리스트)를 수행한다.
  • empty : len(리스트)!=0이라면 0, len(리스트)==0이라면 1을 출력한다.
  • top : len(리스트) !=0이라면 리스트[-1], len(리스트)==0이라면 -1을 출력한다.

4. 문제 해결

import sys

def push(arr):
    stack.append(arr[1])

def pop(arr):
    if len(stack) != 0:
            print(stack.pop())
    else:
        print(-1)

def size(arr):
    print(len(stack))

def empty(arr):
    if len(stack) != 0:
        print(0)
    else:
        print(1)

def top(arr):
    if len(stack) != 0:
        print(stack[-1])
    else:
        print(-1)

N = int(sys.stdin.readline())
stack = []

for i in range(N):
    arr = sys.stdin.readline().split()
    if arr[0] == 'push':
        push(arr)
    elif arr[0] == 'pop':
        pop(arr)
    elif arr[0] == 'size':
        size(arr)
    elif arr[0] == 'empty':
        empty(arr)
    else:
        top(arr)

5. 최적화 방안 

처음 for문을 통해 구현했더니 시간 초과가 났다.

많은 수의 명령어의 경우 모든 조건식을 하나씩 확인해 가며 진행하는 부분에서 시간 초과가 났다고 생각한다.

따라서 각각의 함수를 선언해 조건문에서 걸리는 시간을 줄여가는 것이 핵심인 것 같다.

 

추후에 더 나은 방향을 생각해 봐야 겠다.

'알고리즘 > 백준' 카테고리의 다른 글

[트리] 5639번 : 이진 검색 트리  (0) 2023.03.19
[트리] 1991번 : 트리 순회  (0) 2023.03.19
[스택] 10773번 : 제로  (0) 2023.03.09
[스택] 9012번 : 괄호  (0) 2023.03.09
[문자열] 2557번 : Hello World  (0) 2023.03.03
    '알고리즘/백준' 카테고리의 다른 글
    • [트리] 1991번 : 트리 순회
    • [스택] 10773번 : 제로
    • [스택] 9012번 : 괄호
    • [문자열] 2557번 : Hello World
    jissue
    jissue

    티스토리툴바