eval() 함수에 대해서 (Python)

김용범·2024년 8월 16일

eval() 함수

eval() 함수란 ⁉️

  • eval() 함수는 문자열로 표시된 수식을 계산하여 결괏값을 반환해주는 함수이다.
  • 예를 들어, expr = "1 + 4 * 5" 라는 수식 문자열이 있다면 eval(expr) = 21과 같다.
expr = "1 + 4 * 5" 
print(eval(expr))  # 21

과연 효율적일까 ❓

  • eval() 함수는 파이썬 인터프리터에 의해 동적으로 코드를 컴파일하고 실행하므로, 직접 코드를 작성해서 실행하는 것보다 느릴 수 있다.
  • eval() 함수의 매개변수에 시스템 명령어를 부여하게 되면 보안 취약점을 초래할 수 있다는 보안 문제가 있다.
  • 따라서, 간단한 수식을 계산하는데 활용하면 편하지만, 완벽한 해답은 아닐 수 있다.

+, - 로만 이루어진 수식 구현

잃어버린 괄호 - 백준(1541)

위 문제가 +와 -로 이루어진 수식을 다루는 문제로 풀어보면 좋을 것 같아서 제시해보았다. 한번 풀어보자. 문제는 +와 -로 이루어진 수식에 괄호를 적절하게 추가하여 결괏값을 최소로 만들어 반환하는 문제이다.

아이디어

  • 결괏값을 최소로 만들기 위해서는 -를 최대한 활용해야한다.
  • "-" 가 나타나면 그 다시 "-" 나타날 때까지 묶어야한다. -> "-" 를 기준으로 파싱한다.
  • 코드로 구현해보면 다음과 같다.
from sys import stdin

input = stdin.readline

expr = list(input().rstrip().split("-"))
result = 0

for i in range(len(expr)):
    # 첫 항인 경우
    if i == 0:
        # "+" 연산이 없다면
        if "+" not in expr[i]:
            result = int(expr[i])
        # "+" 연산이 있다면
        else:
            result = sum(map(int, expr[i].split("+")))
    # 첫 항이 아닌 경우
    else:
        # "+" 연산이 없는 경우
        if "+" not in expr[i]:
            result -= int(expr[i])
        # "+" 연산이 있는 경우
        else:
            result -= sum(map(int, expr[i].split("+")))

print(result)
profile
꾸준함을 기록하며 성장하는 개발자입니다!

0개의 댓글