본문 바로가기

알고리즘

백준 알고리즘 문제 풀이 가이드: 코딩 면접 대비 완벽 준비-10828 스택 편 (python)

728x90
반응형

문제 살펴보기!!

문제 링크 : https://www.acmicpc.net/problem/10828

반응형

솔루션 살펴보기!!

import sys

def input():
    return sys.stdin.readline().rstrip()

N = int(input())  # Number of commands

stack = []

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

코드 설명

이 코드는 스택(Stack) 자료구조를 구현하고, 다양한 명령어를 처리하는 프로그램입니다. 스택은 LIFO(Last In, First Out) 방식으로 작동하는 자료구조로, 나중에 들어온 데이터가 먼저 나가는 구조입니다.

입력 함수 정의 (input() 함수)

import sys

def input():
    return sys.stdin.readline().rstrip()

sys.stdin.readline().rstrip(): 표준 입력에서 한 줄을 읽어오고, 문자열 끝에 있는 공백 문자(특히 개행 문자)를 제거합니다. input() 대신 이 함수를 사용하는 이유는 많은 입력을 처리할 때 표준 input() 함수보다 더 빠르기 때문입니다.

명령어 수 입력

N = int(input())  # Number of commands

int(input()): 사용자로부터 명령어의 개수를 입력받고, 이를 정수로 변환합니다. 이 값은 이후에 반복문을 몇 번 실행할지를 결정합니다.

스택 초기화

stack = []

stack = []: 스택을 빈 리스트로 초기화합니다. 파이썬의 리스트(list)는 스택의 기능을 구현하는 데 매우 적합합니다.

명령어 처리 반복문

for _ in range(N):
    command = input().split()
  • for _ in range(N):: N번 반복하여 명령어를 처리합니다. 여기서 _는 반복 변수로 사용되지 않음을 나타냅니다.
  • command = input().split(): 명령어를 입력받고, 공백을 기준으로 나눕니다. 첫 번째 요소는 명령어이고, 두 번째 요소는 (있다면) 명령어에 필요한 값입니다.

명령어 조건 처리

if command[0] == "push":
    stack.append(command[1])

push X: 명령어가 "push"일 경우, 스택에 X를 추가합니다. 리스트의 append() 메소드를 사용하여 X를 스택에 넣습니다.

elif command[0] == "pop":
    if stack:
        print(stack.pop())
    else:
        print(-1)

pop: 스택에서 가장 위에 있는 요소를 제거하고 그 값을 출력합니다. 스택이 비어 있다면 -1을 출력합니다. pop() 메소드는 리스트의 마지막 요소를 제거하고 반환합니다.

elif command[0] == "size":
    print(len(stack))

size: 현재 스택에 있는 요소의 개수를 출력합니다. len(stack)을 사용하여 스택의 크기를 확인합니다.

elif command[0] == "empty":
    print(1 if not stack else 0)

empty: 스택이 비어 있으면 1을, 그렇지 않으면 0을 출력합니다. not stack은 스택이 비어 있을 때 참(True)이 됩니다.

elif command[0] == "top":
    if stack:
        print(stack[-1])
    else:
        print(-1)

top: 스택의 가장 위에 있는 요소를 출력합니다. 스택이 비어 있으면 -1을 출력합니다. stack[-1]은 리스트의 마지막 요소를 가리킵니다.

728x90

스택에 대한 기본 개념:

  • 스택(Stack): 후입선출(LIFO) 방식으로, 나중에 들어간 데이터가 먼저 나옵니다.
  • push: 데이터를 스택에 추가하는 연산입니다.
  • pop: 스택에서 데이터를 제거하고 그 값을 반환하는 연산입니다.
  • size: 스택에 쌓여 있는 데이터의 개수를 반환합니다.
  • empty: 스택이 비어 있는지 확인하는 연산입니다.
  • top: 스택의 가장 위에 있는 데이터를 확인하는 연산입니다.

이 코드는 이러한 스택의 기본 연산들을 처리하며, 각 명령어에 대해 스택을 조작하거나 그 상태를 출력합니다.

728x90
반응형