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
반응형