코딩테스트 대비/단계별 코딩 테스트 준비(27일 과정)

[백트래킹/Python] 14888번: 연산자 끼워넣기 - 효과는 굉장했다!

bluetag_boy 2022. 2. 19. 03:20
반응형
 

14888번: 연산자 끼워넣기

첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, 

www.acmicpc.net

 

알고리즘 분류

  • 부르트포스 알고리즘
  • 백트래킹

 

 

SOLUTION

import sys
from itertools import permutations

N = int(sys.stdin.readline())
nums = list(map(int, sys.stdin.readline().split()))
opeartor = list(map(int, sys.stdin.readline().split())) 
op_list = ["+","-","*","/"]
tmp = []

max_size = -sys.maxsize
min_size = sys.maxsize

for i in range(len(opeartor)):
    for j in range(opeartor[i]):
        tmp.append(op_list[i])
           
for case in permutations(tmp, N-1):
    total = nums[0]
    for k in range(1, N):
        if case[k-1] == "+":
            total += nums[k]
            
        if case[k-1] == "-":
            total -= nums[k]
            
        if case[k-1] == "*":
            total *= nums[k]
            
        if case[k-1] == "/":
            total = int(total/ nums[k])
            
            
    if total > max_size:
        max_size = total
    if total < min_size:
        min_size = total

print(max_size)
print(min_size)