알고리즘 문제를 풀면서 다른 분들은 어떻게 코드를 썼는지 둘러보던 중에 유독 느린 코드가 있어서 들어가봤습니다. 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
'알고리즘 > Python' 카테고리의 다른 글
중복된 값 개수 출력하기 (0) | 2021.06.20 |
---|---|
더하기 사이클, list와 숫자로 풀이 (0) | 2021.05.18 |
입력받은 문자열의 최소, 최댓값 구하기 (0) | 2021.05.11 |
for문제를 range, join, map을 활용해서 풀기 (0) | 2021.04.26 |
문자열 곱하기 (0) | 2021.04.18 |