카테고리 없음
[Baekjoon] 백준 7490번 : 0 만들기 (by Python) with eval
코딩하는이씨
2024. 10. 19. 23:59
728x90
반응형
https://www.acmicpc.net/problem/7490
아이디어
자연수 N이 3~9로 크지 않고, 연산자의 경우 +, -, 공백으로 3가지 경우가 포함된다.
N에 대한 오름차순 수열에 대해 모든 연산자를 사용하는 경우를 뻗어나가며 수식의 결과가 0이면 체크하는 방식으로 코드를 구현했다.
-> 브루트포스 알고리즘
파이썬 추가 아이디어 : eval
처음에는 각 숫자를 계속 이어붙이며 연산을 수행했다. 하지만 이 로직을 리팩토링 할 수 있는 파이썬 내장팜수 eval을 알게되었다.
eval 함수는 파이썬에서 제공하는 내장 함수로, 문자열로 표현된 식(expression)을 받아서 실행하고 그 결과를 반환한다.
사용법
expr = "2 + 3 * (4 - 1)"
result = eval(expr)
print(result) # 출력: 11
이런 eval 함수를 사용해 앞의 수식들을 String 형태로 계속 이어 붙여나가며 편하게 결과가 0인지 체크할 수 있었다.
정답 코드
import sys
sys.setrecursionlimit(10000)
def solve(n):
result = []
operators = ["+", "-", " "]
def dfs(index, expr):
if index > n:
eval_expr = expr.replace(' ', '')
if eval(eval_expr) == 0:
result.append(expr)
return
num_str = str(index)
for op in operators:
dfs(index+1, expr + op + num_str)
dfs(2, '1')
result.sort()
for expr in result:
print(expr)
t = int(input())
for _ in range(t):
n = int(input())
solve(n)
print()
- Expr은 숫자들 사이에 공백, +, - 연산자가 삽입되어 만들어진 수식 문자열이다.
- expr.replace() 를 통해 공백 연산자를 제거하고 숫자를 결합해 연산을 수행할 수 있도록 한다.
728x90
반응형