https://www.acmicpc.net/problem/14888
14888번: 연산자 끼워넣기
첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수,
www.acmicpc.net
'''
14888번: 연산자 끼워넣기 / silver 1 / 브루트포스
'''
import sys
import itertools
input = sys.stdin.readline
# 1. 입력받기
n = int(input())
arr = list(map(int, input().split()))
op_cnt = list(map(int, input().split()))
# 2. op_list 만들기
operator = ['+', '-', '*', '//']
op_list = []
for i in range(4):
for o in range(op_cnt[i]):
op_list.append(operator[i])
# 3. op_case 만들기
op_case = itertools.permutations(op_list, n - 1)
# 4. min_res, max_res 구하기
def calculate(a, op, b):
if op == '+':
return a + b
elif op == '-':
return a - b
elif op == '*':
return a * b
elif op == '//':
if a < 0:
return (-a // b) * -1
else:
return a // b
res_case = []
for case in op_case:
a, b = arr[0], arr[1]
op = case[0]
res = calculate(a, op, b)
for i in range(1, len(case)):
a = res
b = arr[i + 1]
op = case[i]
res = calculate(a, op, b)
res_case.append(res)
# 5. 출력하기
print(max(res_case))
print(min(res_case))
대략적인 로직은 주석 처리!
구현 중요 부분
저는 입력받은 연산자의 개수를 op_list를 만들어 연산자의 개수만큼 연산자를 해당 리스트에 넣어주었습니다,
그 이유는 itertools.permutations 순열을 활용하여 op_case를 만들기 위해서는 op_list가 필요했기 때문!!
그후, op_case를 하나씩 꺼내서 연산 작업을 진행했습니다.
'백준 문제풀이' 카테고리의 다른 글
11052번: 카드 구매하기 / silver 1 / DP (0) | 2023.04.06 |
---|---|
10799번: 쇠막대기 / silver 2 / 스택 (0) | 2023.04.05 |
9020번: 골드바흐의 추측 / silver 2 / 구현 (0) | 2023.04.03 |
2740번: 행렬 곱셈 / silver 5 / 구현 (0) | 2023.04.02 |
11728번: 배열 합치기 / silver 5 / 정렬 (0) | 2023.04.01 |