카테고리 없음

[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
반응형