알고리즘/Python

eval, exec 함수

임리을 2021. 4. 13. 17:09

알고리즘 문제를 풀면서 다른 분들은 어떻게 코드를 썼는지 둘러보던 중에 유독 느린 코드가 있어서 들어가봤습니다. exec함수에다가 한 줄로 쓴 코드였습니다.

 

느려서 문제라기보단 이렇게 쓸 수도 있구나 싶었습니다.

 

검색하니 eval도 같이 나와서 이해한 내용만 같이 정리해봤습니다.

 


 

  • eval 함수는 변수가 포함된 식(expression)을 문자열(string) 형태로 받아 작동합니다.

 

a0 = 'Hello'

a1 = 'World!'

 

for i in range(2):

    print(eval('a' + str(i)))

 

------------------------------

 

Hello

World!

 

 

  • exec 함수는 객채(object)를 문자열 형태로 받아 작동합니다.

exec('a = 1')

 

 

언급한 문제는 먼저 예시가 나올 횟수를 받고, 숫자 A, B를 입력받아

Case #(횟수): A + B = (A+B)를 출력하는 프로그램입니다.

 

예시)

5

1 1

12 34

5 500

40 60

1000 1000

 

# 제출

 

a = int(input())

i = 1

exec('b,c=map(int, input().split());print("Case #{}: {} + {} = {}".format(i,b,c,c+b));i+=1;'*a)

 

 

# 가독성을 위한 정리

 

a = int(input())

i = 1

exec('''b, c = map(int, input().split())

print("Case #{}: {} + {} = {}".format(i, b, c, c+b))

i += 1

'''*a)

 

 

# 참고

 

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

docs.python.org/ko/3/library/functions.html#exec

docs.python.org/ko/3/library/functions.html#eval

 

11022번: A+B - 8

각 테스트 케이스마다 "Case #x: A + B = C" 형식으로 출력한다. x는 테스트 케이스 번호이고 1부터 시작하며, C는 A+B이다.

www.acmicpc.net