728x90
백준문제 1541번을 풀다가 궁금증이 생겼다.
https://www.acmicpc.net/problem/1541
1541번: 잃어버린 괄호
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다
www.acmicpc.net
문자열로 코드를 주면 코드를 그대로 실행해주는 코드는 없을까?
결과는 역시 있었다. 바로 eval()과 exec()
eval: 파이썬 식 -> 파이썬 컴파일 코드
exec: 문자열 -> 파이썬 컴파일 코드
문자열을 python 실행코드로 변환해주는 eval(), exec()
파이썬 내장함수인 eval(), exec()활용한 코드 작성
mindcompass.github.io
그래서 내가 짠 코드
from collections import deque
import sys
def mk_li(arr):
result=[]
temp=int(arr[0])
for i in range(1, len(arr)):
if arr[i]!='+' and arr[i]!='-':
temp=temp*10+int(arr[i])
else:
result.append(temp)
if arr[i]=='+': result.append('+')
else : result.append('-')
temp=0
result.append(temp)
return result
#eval(): 파이썬 식-> 파이썬 컴파일 코드
#exec(): 문자열 -> 파이썬 컴파일 코드
a=list(sys.stdin.readline().rstrip())
arr=deque(mk_li(a))#list
arr.insert(0, '(')
i=0
while i<len(arr):
if arr[i]=='-':
arr.insert(i, ')')
arr.insert(i+2, '(')
i=i+2
else: i=i+1
arr.append(')')
#print(arr)
m=''.join(str(i) for i in arr)#String
#print(m)
print(eval(m))#<-------------이때 사용
사실 이 풀이 말고 다른 풀이가 더 시간과 메모리 측면에서 우수하게 나왔다.
그리고 리스트를 사용할 때는 deque를 쓰면 훨씬 빠르게 작동!!
'프로그래밍 공부 > python' 카테고리의 다른 글
[python] 파이썬 큰 숫자 입력 꿀팁 (0) | 2023.02.14 |
---|---|
파이썬 내장함수 enumerate() (0) | 2023.02.14 |
python 내장함수 zip() (0) | 2023.02.09 |