본문 바로가기

프로그래밍/백준

백준 14888 연산자 끼워넣기 - 파이썬

풀이.

itertools의 permutations를 이용해 모든 경우의 수를 만들어놓고 풀이를 하였다.

처음에는 실패하였는데 알고보니 permutations의 경우에는 같은 값 이더라도 원소의 순서가 다르면 다른 경우로 간주하여서 중복되는 경우가 매우 많다 그리하여 set을 이용하여 중복되는 값을 제거하여 문제를 풀어서 통과했다.

 

소스코드.

import sys
import itertools

N = int(sys.stdin.readline())
number = list(map(int, sys.stdin.readline().split()))
operator = list(map(int, sys.stdin.readline().split()))
op = ''
op += '+' * operator[0]
op += '-' * operator[1]
op += '*' * operator[2]
op += '/' * operator[3]

op = list(op)
op_combination = set(itertools.permutations(op, N-1))
idx = 0
max, min = -1000000000, 1000000000
for o in op_combination:
    idx = 0
    result = number[0]
    for n in range(1, len(number)):
        if o[idx] == '+':
            result += number[n]
        elif o[idx] == '-':
            result -= number[n]
        elif o[idx] == '*':
            result *= number[n]
        elif o[idx] == '/':
            if result < 0 and number[n] > 0:
                result = (abs(result) // number[n]) * -1
            else:
                result = result // number[n]

        idx += 1
    if result > max:
        max = result

    if result < min:
        min = result

print(int(max))
print(int(min))