CS/코딩 테스트

[알고리즘][파이썬] 백준_10828_스택

DandyNow 2021. 12. 27. 22:19
728x90
반응형

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

 

10828번: 스택

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

www.acmicpc.net

5개의 명령어가 있고,

그 명령어 중 N개를 입력하면,

그에 맞는 결과가 순차적으로 최종 출력되어야 한다.


globals 함수 이용(맞았습니다)

# globals 함수 이용(결과: 맞았습니다!)
stack = []
def push(n):
    stack.append(n)

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

def size():
    rst.append(len(stack))

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

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

N = int(input())

rst = []
for _ in range(N):
    cmd = ''
    val = 0
    tmp = input()

    space = tmp.find(' ')
    if space == -1: # find 함수는 찾는 값이 없을 때 -1 리턴
        globals()[tmp]()
    else:
        cmd, val = tmp[:space], tmp[space:]
        globals()[cmd](int(val))

for i in rst:
    print(i)

 

5개의 명령어는 함수를 선언해 각각 만들었다.

N개의 문자열을 입력 받아

그 문자열로 선언된 5개의 함수를 각각 실행해야 한다.

 

이 문제에서는 함수명으로 직접 호출할 수 없고,

입력한 문자열로 함수를 호출해야 했다.

구글링해보니,

locals와 globals 함수를 이용하면 문자열로 함수를 호출 할 수있었다.

지역변수, 전역변수 구분할 필요가 없었기 때문에

globals 함수로 문제를 풀었다.

728x90
반응형