본문 바로가기
프로그래밍/알고리즘 문제

[BOJ 15658] 연산자 끼워넣기(2) - python

by 잇서니 2019. 9. 24.
반응형

문제조건

  • N개의 수가 주어진다. 연산자는 N-1개보다 더 많이 주어질 수 있다.
  • N개의 수의 순서는 변하지 않는다. 연산자의 순서만 바뀐다.

핵심개념

  • 연산자 개수 중에서 N-1개를 뽑아 순열을 구해야 한다.
  • 이를 위해 DFS, 백트래킹을 활용하여 모든 경우의 수를 탐색한다.

python 코드

N = int(input())
a = list(map(int,input().split()))
cnt = list(map(int,input().split()))
max_ans = -1000000000
min_ans = 1000000000

def dfs(idx, ans):
    global max_ans,min_ans
    
    if idx == N:
        max_ans = max(max_ans, ans)
        min_ans = min(min_ans, ans)
        return
    
    if cnt[0] > 0:
        cnt[0] -= 1
        dfs(idx+1, ans+a[idx])
        cnt[0] += 1
    if cnt[1] > 0:
        cnt[1] -= 1
        dfs(idx+1, ans-a[idx])
        cnt[1] += 1
    if cnt[2] > 0:
        cnt[2] -= 1
        dfs(idx+1, ans*a[idx])
        cnt[2] += 1
    if cnt[3] > 0:
        cnt[3] -= 1
        dfs(idx+1, int(ans/a[idx]))
        cnt[3] += 1
        
dfs(1,a[0])
print(max_ans)
print(min_ans)
반응형

댓글