파이썬

python의 eval 함수 백준 스택 10828번 문제 풀다가

mcdn 2020. 8. 8. 15:49
반응형

https://ko.javascript.info/eval

import sys


class MyList(list):

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

    def pop(self):
        return super(MyList, self).pop() if self.size() else -1

    def size(self):
        return len(self)

    def empty(self):
        return int(self.size() == 0)

    def top(self):
        return self[-1] if self.size() else -1


def main():
    n = int(sys.stdin.readline())
    mylist = MyList()

    for _ in range(n):
        command = sys.stdin.readline().split()
        if len(command) == 1:
            ret = eval(f"mylist.{command[0]}()")
        else:
            ret = eval(f'mylist.{command[0]}({command[1]})')
        if ret != None:
            print(ret)

 
main()

후덜덜 

스터디원 분 코든데 엄청 잘 짜심

 

eval (f 문자열 형태의 함수를 실행할 수 있다. 

command[0] = 문자열 이걸 push라는 형태로 인식할 수 있게 함 그래서 mylist.pop()가되는 거임 

 

else

의 경우에는 push 1 과 같이 두개 들어오는거 인식하게 하는 코드 

 

sys.stdin.readline() 라인을 읽어낸다. int n 

commnad 역시 sys.stdin.readline()으로 읽어내고 split()으로 줄마다 자르는 듯? 바로 배열 만들어지나봄 

 

self.size()

에서는 어케 하는거지 super() 

super(Mylist, self).pop() -> self.pop()으로 지우면 이런 에러가 나타난다. 

 

내 생각엔 Mylist(list) 할 때 부모 클래스를 불러온듯? 

근데 이 클래스 list가 내장클래스인지.. 

#Stack class 정의
class Stack:
    def __init__(self):
        self.len = 0
        self.list = []
        
    def push(self, num):
        self.list.append(num)
        self.len += 1
    
    def pop(self):
        if self.size() == 0:
            return -1
        pop_result = self.list[self.len - 1]
        del self.list[self.len - 1]
        self.len -= 1
        return pop_result
        
    def size(self):
        return self.len
        
    def empty(self):
        return 1 if self.len == 0 else 0
        
    def top(self):
        return self.list[-1] if self.size() != 0 else -1
        
 
num = int(input())
stack = Stack()
while(num > 0):
    num -= 1
    input_split = input().split()
 
    op = input_split[0]
 
    if op == "push":
        stack.push(input_split[1])
    elif op == "pop":
        print(stack.pop())
    elif op == "size":
        print(stack.size())
    elif op == "empty":
        print(stack.empty())
    elif op == "top":
        print(stack.top())
    else:
        print("unacceptable op")

다른 블로그의 파이썬 코드 : https://chunghyup.tistory.com/37

 

[알고리즘] 백준 - 10828 스택 파이썬 구현

문제 정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오. 명령은 총 다섯 가지이다. push X: 정수 X를 스택에 넣는 연산이다. pop: 스택에서 가장 위�

chunghyup.tistory.com

https://suwoni-codelab.com/python%20%EA%B8%B0%EB%B3%B8/2018/03/02/Python-Basic-List1/

파이썬은 기본이 배열이기 때문에 리스트 클래스가 따로 있다. list() 신기!!

 

 

 

반응형