ALGORITHM STUDY WITH PYTHON/Bruteforce
boj.kr/14888 연산자 끼워넣기 (silver1) 파이썬 풀이
ebson
2023. 4. 20. 12:34
1. nums에 순서대로 숫자들을 저장
2. +, -, *, / 연산자를 개수만큼 qs 배열에 저장
3. 문제 조건에 맞게 divide 함수를 정의
4. permutations를 사용해 가능한 모든 연산자들의 순열에 대해 아래를 반복
4.1. ans에 nums[0]을 저장
4.2. 연산자들의 순열을 순회하면서 +, -, *, divide 연산을 수행한 결과를 ans으로 갱신
4.3. ans와 min_ans, max_ans를 각각 최소, 최대 비교해 min_ans, max_ans를 갱신
5. max_ans를 출력하고 다음줄에 min_ans를 출력
N = int(input())
nums = list(map(int, input().split()))
ops = list(map(int, input().split()))
qs = '+' * ops[0] + '-' * ops[1] + '*' * ops[2] + '/' * ops[3]
def divide(a, b):
if a < 0 and b > 0:
return -1 * (abs(a) // b)
return a // b
from itertools import permutations
max_ans = -int(1e9)
min_ans = int(1e9)
for permu in permutations(qs, N - 1):
ans = nums[0]
for i in range(N - 1):
if permu[i] == '+':
ans += nums[i + 1]
elif permu[i] == '-':
ans -= nums[i + 1]
elif permu[i] == '*':
ans *= nums[i + 1]
elif permu[i] == '/':
ans = divide(ans, nums[i + 1])
max_ans = max(max_ans, ans)
min_ans = min(min_ans, ans)
print(max_ans)
print(min_ans)
max(n1, n2), min(n1, n2) 함수의 인자로는 int 형만 사용할 수 있다. 그래서 max = -1e9 min = 1e9와 같이 초기화하면 오답이 되고 max = -int(1e9) min = int(1e9)와 같이 초기화 해두어야 정답으로 체점된다.