본문 바로가기
ALGORITHM/BAEKJOON

[BOJ/Python] 14888. 연산자 끼워넣기

by 안녕나는현서 2021. 12. 2.
728x90

📌 문제

https://www.acmicpc.net/problem/14888

 

14888번: 연산자 끼워넣기

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

www.acmicpc.net

 

📌 문제 접근 방법

  1. 연산자를 입력된 개수만큼 리스트에 넣은 후 순열을 만들어줬다.
    똑같은 연산자가 2번 이상 들어갈 경우, 중복될 수 있으므로 set을 사용해서 중복을 제거해줬다.
  2. 숫자와 연산자를 순회하면서 앞에서부터 계산한 값을 results에 append 해줬다.
  3. results에서 최대값과 최소값을 출력했다.

 

📌 코드

from itertools import permutations

def calculate(num1, num2, operator):
    if operator == '+':
        return num1 + num2
    elif operator == '-':
        return num1 - num2
    elif operator == '*':
        return num1 * num2
    elif operator == '/':
        if num1 >= 0 :
            return num1//num2
        else:
            return -((-num1)//num2)


N = int(input())
numbers = list(map(int, input().split()))
temp = list(map(int, input().split()))
operator = ['+', '-', '*', '/']
operators = []

for i in range(4):
    for _ in range(temp[i]):
        operators.append(operator[i])

results = []
for opers in set(permutations(operators)):
    result = numbers[0]
    for i in range(N-1):
        result = calculate(result, numbers[i+1], opers[i])
    
    results.append(result)

print(max(results))
print(min(results))
728x90

댓글