본문 바로가기

기초 공부/코딩테스트 연습

[코딩테스트 #5] 백준 10828 스택 - python

728x90

안녕하세요 코딩테스트 글은 오랜만입니다.

 

사실 코딩테스트를 다시 시작한건 보름정도 됐습니다만 블로그 업로드가 힘들어서 올리지 않고 있었어요

 

그 동안 바뀌게 된 점은 java가 아닌 python으로 코딩테스트를 준비하기로 했다는 것과

프로그래머스가 아닌 백준 코딩을 이용하고 있다는 점입니다.

 

오늘 풀어본 문제는 백준 10828 스택 문제 solved기준 실버 4 문제입니다.

 

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

 

10828번: 스택

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

www.acmicpc.net

소요시간은 약 20~30분 걸린거 같습니다.

 

import sys

# 명령의 수
N = int(input())

# 스택 리스트 정의
stack = []


# 결과 리스트 정의
result = []

def push(X):
    stack.append(X)

def pop():
    if len(stack) != 0:
        
        return result.append(stack.pop())
    else :
        return result.append(-1)

def size():
    return result.append(len(stack))

def empty():
    if len(stack) == 0:
        return result.append(1)
    else :
        return result.append(0)

def top():
    if len(stack) != 0:
        return result.append(stack[-1])
    else :
        return result.append(-1)
    


for i in range(N):
    Input_Command = list(sys.stdin.readline().split())
    
    if len(Input_Command) == 2:
        Input_X = int(Input_Command[1])
        push(Input_X)
    elif Input_Command[0] == "pop":
        pop()
    elif Input_Command[0] == "size":
        size()
    elif Input_Command[0] == "empty":
        empty()
    elif Input_Command[0] == "top":
        top()
    
    

for i in range(len(result)):
    print(result[i])

 

일단 가장 처음 명령의 개수를 입력 받습니다.

 

입력받은 개수에 따라 for문을 돌리구요

 

그리고 스택을 저장할 리스트와 결과를 출력할 리스트를 만들었습니다.

 

그 밑에 명령어에 따른 함수를 정의해 놨습니다.

 

그 다음 명령어를 입력받는데 입력받는 명령어를 list형식으로 받아서 

 

리스트의 크기가 2라면 push 명령어이기 때문에 이를 처리하도록 했습니다.

나머지는 if문을 통해 만들어진 함수를 출력하도록했습니다.

 

맨 마지막에는 저장된 결과값들을 순서대로 출력합니다.

 

설명할 게 없는 쉬운 문제였던거 같습니다.

 

 

이 문제에서 가장 큰 수확은 list에 pop()이라는 메소드를 알게된 겁니다.

이 메소드는 가장 마지막에 있는 값을 list에서 삭제하고 그 값을 list에서 삭제합니다.

 

반응형