파이썬 알고리즘 142번 | [백준 10828번] - Stack

Yunny.Log ·2022년 5월 3일
0

Algorithm

목록 보기
145/318
post-thumbnail

142. 스택, 스택 활용

1) 어떤 전략(알고리즘)으로 해결?

  • 스택 구현 및 스택의 개념 활용

2) 코딩 설명

<내 풀이>



def push(stack,x):
    stack.append(x)

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

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

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

def top(stack):
    if(len(stack)>0):
        print(stack[-1])
    else:
        print(-1)
import sys
if __name__=="__main__":
    stack=[]
    n=int(sys.stdin.readline()) #명령의 수
    for i in range(n):
        order = list(str(sys.stdin.readline()).split())
        
        if order[0]=="push":
            #print(int(order[1]))
            x=int(order[1])
            push(stack, x)

        elif order[0] == "pop":
            pop(stack)

        elif order[0] == "size":
            size(stack)

        elif order[0] == "empty":
            empty(stack)
            
        else :
            top(stack)

  • 입력만 sys.stdin.readline() 으로 받아주면 만사해결

<다른 분의 풀이 or 내 틀린 풀이, 문제점>

(1) 10828번

  • 함수로 괜히 나눈 탓인가? 시간초과가 나버렸다.

if __name__=="__main__":
    stack=[]
    n=int(input()) #명령의 수
    for i in range(n):
        order = list(str(input()).split())
        #print(order)

        if order[0]=="push":
            #print(int(order[1]))
            x=int(order[1])
            stack.append(x)

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

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

        elif order[0] == "empty":
            if len(stack)==0:
                print(1)
            else :
                print(0)

        else :
                if(len(stack)>0):
                    print(stack[-1])
                else:
                    print(-1)

  • 이렇게 진행했는데도 시간초과

원인 : input을 (sys.stdin.readline()) 의 형태로 받아주어야 합니다.

(2) 6198번

  • 이중 FOR문을 써서 시간초과가 나고 말았다.

<반성 점>

  • 스택에 대한 개념을 안다고 생각했는데, 문제에 이를 응용해서 생각하는 연습이 부족한 것 같다.

<배운 점>

  • (sys.stdin.readline()) 10번 치자, 외우고 앞으로 모든 input은 얘로만 받을 거니깐

sys.stdin.readline()
sys.stdin.readline()

(+) sys.stdin.readline() 활용법 : https://codesyun.tistory.com/178

N줄의 문자열을 입력 받아 리스트에 저장할 때
import sys

n = int(sys.stdin.readline())
data = [sys.stdin.readline().strip() for i in range(n)]

(+) sys.stdin.readline() 은 개행문자, 공백을 포함하는 경우가 많아서 여백 제거를 해주어야 한다고 한다.

* rstrip() 

: 오른쪽 공백을 삭제

 

* lstrip()

: 왼쪽 공백을 삭제

 

* strip()

: 왼쪽, 오른쪽 공백을 삭제

0개의 댓글