minimimi
[백준] 14888 연산자 끼워넣기 본문
반응형
문제출처] https://www.acmicpc.net/problem/14888
풀이
같은 숫자를 포함하는 순열을 구해야 된다. 파이썬에서 그러한 함수를 지원하지 않기 때문에 일반 순열 함수를 이용하여 순열을 구한다음 set 자료형을 사용하여 중복을 제거해주었다.
주의할 점은 음수 나누기 양수를 할 때, 음수를 우선 양수로 변환한 다음 나눗셈을 한 뒤 다시 음수로 변화해줘야 된다는 점이다.
소스코드는 Python 3으로 작성되었습니다.
import sys
from itertools import permutations
input = sys.stdin.readline
max_result = -1_000_000_001
min_result = 1_000_000_001
n = int(input())
numbers = list(map(int, input().split()))
input_operators = list(map(int, input().split()))
# 0 1 2 3
# + - * /
# 오퍼레이터 순열로 만들기
list_operators = []
for i, operator in enumerate(input_operators):
for _ in range(operator):
list_operators.append(i)
length_list_operators = len(list_operators)
permutation_operators = set(permutations(list_operators, length_list_operators))
for operators in permutation_operators:
tmp_sum = numbers[0]
for number, operator in zip(numbers[1:], operators):
if operator == 0:
tmp_sum += number
elif operator == 1:
tmp_sum -= number
elif operator == 2:
tmp_sum *= number
else:
if tmp_sum < 0:
tmp_sum *= -1
tmp_sum //= number
tmp_sum *= -1
else:
tmp_sum //= number
max_result = max(max_result, tmp_sum)
min_result = min(min_result, tmp_sum)
print(max_result, min_result, sep='\n')
반응형
'프로그래밍 공부 > 알고리즘' 카테고리의 다른 글
[백준] 9184 신나는 함수 실행 (0) | 2021.10.04 |
---|---|
[백준] 11725 트리의 부모 찾기 (0) | 2021.10.03 |
[백준] 4949 균형잡힌 세상 (0) | 2021.09.29 |
[백준] 1010 다리 놓기 (0) | 2021.09.28 |
[백준] 3036 링 (0) | 2021.09.27 |