[λ°±μ€] 14888 μ°μ°μ λΌμλ£κΈ° with Python
π BOJ 14888 μ°μ°μ λΌμλ£κΈ°
π‘ 쑰건
Nκ°μ μλ‘ μ΄λ£¨μ΄μ§ μμ΄ A1, A2, ..., AN
μμ μ μ¬μ΄μ λΌμλ£μ μ μλ N-1κ°μ μ°μ°μ
μ°μ°μλ λ§μ (+), λΊμ (-), κ³±μ (Γ), λλμ (Γ·)μΌλ‘λ§ μ΄λ£¨μ΄μ Έ μλ€.μμ κ°μ N(2 β€ N β€ 11)
A1, A2, ..., ANμ΄ μ£Όμ΄μ§λ€. (1 β€ Ai β€ 100)첫째 μ€μ λ§λ€ μ μλ μμ κ²°κ³Όμ μ΅λκ°μ, λμ§Έ μ€μλ μ΅μκ°μ μΆλ ₯
μμ΄, λΈλ£¨νΈν¬μ€ μκ³ λ¦¬μ¦ μ νμ λ¬Έμ
π₯ μμ€ μ½λ
from sys import stdin
from itertools import permutations
n = int(stdin.readline().rstrip())
num = list(map(int, stdin.readline().split()))
cal_ = list(map(int, stdin.readline().split()))
gi = ['+', '-', '*', '/']
cg = []
vmax = -1e9
vmin = 1e9
def calculation(sign, num):
global vmax, vmin
calc_num = num[0]
for idx in range(1, len(num)):
if sign[idx - 1] == '+':
calc_num += num[idx]
elif sign[idx - 1] == '-':
calc_num -= num[idx]
elif sign[idx - 1] == '*':
calc_num *= num[idx]
elif sign[idx - 1] == '/':
if num[idx] < 0 or calc_num < 0:
calc_num = abs(calc_num) // abs(num[idx]) * -1
else:
calc_num //= num[idx]
vmax = max(vmax, calc_num)
vmin = min(vmin, calc_num)
for i in range(4):
cg.extend([gi[i]] * cal_[i])
for sign in list(set(permutations(cg, n - 1))):
calculation(sign, num)
print(vmax)
print(vmin)
π μμ λ° μ€νκ²°κ³Ό
μμ
2
5 6
0 0 1 0
μ€νκ²°κ³Ό
30
30
β¨οΈ λ¬Έμ νμ΄
permutations λΌμ΄λΈλ¬λ¦¬ import
μ°μ°μλ₯Ό λ§μ (+), λΊμ (-), κ³±μ (Γ), λλμ (Γ·) μμλλ‘ λ΄μ gi 리μ€νΈ μ μΈ.
μ°μ°μμ κ°μ 리μ€νΈλ₯Ό μ λ ₯λ°μ κ° μ°μ°μμ κ°μλ§νΌ κ³±νμ¬ cg 리μ€νΈμ extend ν΄μ€λ€.
cg 리μ€νΈμ κΈΈμ΄λ μ λ ₯λ°μ μμ΄μ κΈΈμ΄ - 1μ΄λ€.
permutaions ν¨μλ₯Ό ν΅ν΄ μμ΄μ ν΅ν΄ μ°μ°μμ κ²½μ°λ₯Ό λ½μ calculation ν¨μμ λ£κ³ κ³μ°νλ€.calculation ν¨μμμ zero division μλ¬λ₯Ό μ‘°μ¬ν΄μΌνλ€.
calculation ν¨μμμ κ³μ°ν κ²°κ³Όκ°μΌλ‘ μ΅μκ°κ³Ό μ΅λκ°μ κ°±μ ν΄μ€λ€.
πΎ λλμ
- permutations ν¨μλ₯Ό μ¬μ©νμ¬ κ°λ¨νκ² ν μ μμ΄ λ§€μ° μ°©ν λ¬Έμ μλ€κ³ μκ°ν©λλ€.
- μκ°μ΄κ³Όκ° μλκ² νκΈ° μν΄μ permutations ν¨μ κ²°κ³Όλ₯Ό set() μΌλ‘ λλ¬μΈμ μ€λ³΅μ μ κ±°νμ΅λλ€.