구현, 브루트포스 - 7490번: 0 만들기

jisu_log·2025년 6월 14일

알고리즘 문제풀이

목록 보기
42/105


  • eval('문자열 수식') 을 사용하면 문자열로 된 수식 계산값을 한번에 얻을 수 있음
  • 문자열.replace('이 문자를', '이 문자로') 문자열에서 특정 문자만 바꾸기
  • itertools.product(요소 리스트, repeat = n) 로 n개 뽑는 중복 순열 구하기
import itertools

cases = int(input())
opers = [0, 1, 2]


for _ in range(cases):
    n = int(input())
    nums = []
    all_res = []
    for i in range(1, n + 1):
        nums.append(i)
    
    res = itertools.product(opers, repeat = n - 1)
    res = list(res)

    for c in res:
        line = f'{nums[0]}'

        for i in range(0, len(c)):
            if c[i] == 0:
                line += '+'
                
            elif c[i] == 1:
                line += '-'
                
            elif c[i] == 2:
                line += ' '
            line += f'{nums[i + 1]}'

        no_space_line = line.replace(" ", "")

        if eval(no_space_line) == 0: # 문자열 수식을 계산했을 때 0이면 추가
            all_res.append(line)
        
    all_res.sort() # ASCII 순서에 따라 수식 정렬
    # 수식 출력
    for elem in all_res:
        print(elem)
    print() # 다음 케이스와 한 줄 분리
        

0개의 댓글