[λ°±μ€ 14888 π₯] μ°μ°μ λΌμλ£κΈ°
λ¬Έμ
Nκ°μ μλ‘ μ΄λ£¨μ΄μ§ μμ΄ A1, A2, ..., ANμ΄ μ£Όμ΄μ§λ€. λ, μμ μ μ¬μ΄μ λΌμλ£μ μ μλ N-1κ°μ μ°μ°μκ° μ£Όμ΄μ§λ€. μ°μ°μλ λ§μ (+), λΊμ (-), κ³±μ (×), λλμ (÷)μΌλ‘λ§ μ΄λ£¨μ΄μ Έ μλ€.
μ°λ¦¬λ μμ μ μ¬μ΄μ μ°μ°μλ₯Ό νλμ© λ£μ΄μ, μμμ νλ λ§λ€ μ μλ€. μ΄λ, μ£Όμ΄μ§ μμ μμλ₯Ό λ°κΎΈλ©΄ μ λλ€.
μλ₯Ό λ€μ΄, 6κ°μ μλ‘ μ΄λ£¨μ΄μ§ μμ΄μ΄ 1, 2, 3, 4, 5, 6μ΄κ³ , μ£Όμ΄μ§ μ°μ°μκ° λ§μ (+) 2κ°, λΊμ (-) 1κ°, κ³±μ (×) 1κ°, λλμ (÷) 1κ°μΈ κ²½μ°μλ μ΄ 60κ°μ§μ μμ λ§λ€ μ μλ€. μλ₯Ό λ€μ΄, μλμ κ°μ μμ λ§λ€ μ μλ€.
- 1+2+3-4×5÷6
- 1÷2+3+4-5×6
- 1+2÷3×4-5+6
- 1÷2×3-4+5+6
μμ κ³μ°μ μ°μ°μ μ°μ μμλ₯Ό 무μνκ³ μμμλΆν° μ§νν΄μΌ νλ€. λ, λλμ μ μ μ λλμ μΌλ‘ λͺ«λ§ μ·¨νλ€. μμλ₯Ό μμλ‘ λλ λλ C++14μ κΈ°μ€μ λ°λ₯Έλ€. μ¦, μμλ‘ λ°κΎΌ λ€ λͺ«μ μ·¨νκ³ , κ·Έ λͺ«μ μμλ‘ λ°κΎΌ κ²κ³Ό κ°λ€. μ΄μ λ°λΌμ, μμ μ 4κ°μ κ²°κ³Όλ₯Ό κ³μ°ν΄λ³΄λ©΄ μλμ κ°λ€.
- 1+2+3-4×5÷6 = 1
- 1÷2+3+4-5×6 = 12
- 1+2÷3×4-5+6 = 5
- 1÷2×3-4+5+6 = 7
Nκ°μ μμ N-1κ°μ μ°μ°μκ° μ£Όμ΄μ‘μ λ, λ§λ€ μ μλ μμ κ²°κ³Όκ° μ΅λμΈ κ²κ³Ό μ΅μμΈ κ²μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
첫째 μ€μ μμ κ°μ N(2 ≤ N ≤ 11)κ° μ£Όμ΄μ§λ€. λμ§Έ μ€μλ A1, A2, ..., ANμ΄ μ£Όμ΄μ§λ€. (1 ≤ Ai ≤ 100) μ μ§Έ μ€μλ ν©μ΄ N-1μΈ 4κ°μ μ μκ° μ£Όμ΄μ§λλ°, μ°¨λ‘λλ‘ λ§μ (+)μ κ°μ, λΊμ (-)μ κ°μ, κ³±μ (×)μ κ°μ, λλμ (÷)μ κ°μμ΄λ€.
μΆλ ₯
첫째 μ€μ λ§λ€ μ μλ μμ κ²°κ³Όμ μ΅λκ°μ, λμ§Έ μ€μλ μ΅μκ°μ μΆλ ₯νλ€. μ°μ°μλ₯Ό μ΄λ»κ² λΌμλ£μ΄λ νμ -10μ΅λ³΄λ€ ν¬κ±°λ κ°κ³ , 10μ΅λ³΄λ€ μκ±°λ κ°μ κ²°κ³Όκ° λμ€λ μ λ ₯λ§ μ£Όμ΄μ§λ€. λν, μμμλΆν° κ³μ°νμ λ, μ€κ°μ κ³μ°λλ μμ κ²°κ³Όλ νμ -10μ΅λ³΄λ€ ν¬κ±°λ κ°κ³ , 10μ΅λ³΄λ€ μκ±°λ κ°λ€.

λ¬Έμ νμ΄
import sys
n=int(sys.stdin.readline().strip())
numbers=list(map(int, sys.stdin.readline().strip().split(' ')))
opr=list(map(int, sys.stdin.readline().strip().split(' ')))
maxans=int(-1e9)
minans=int(1e9)
def dfs(cur,idx):
global maxans, minans, n
if idx==n:
maxans=max(maxans, cur)
minans=min(minans, cur)
return
# λνκΈ°
if opr[0]>0:
opr[0]-=1
dfs(cur+numbers[idx], idx+1)
opr[0]+=1
# λΉΌκΈ°
if opr[1]>0:
opr[1]-=1
dfs(cur-numbers[idx], idx+1)
opr[1]+=1
# κ³±νκΈ°
if opr[2]>0:
opr[2]-=1
dfs(cur*numbers[idx], idx+1)
opr[2]+=1
# λλκΈ°
if opr[3]>0:
opr[3]-=1
if cur<0:
cur=-cur
dfs(-(cur//numbers[idx]), idx+1)
else:
dfs(cur//numbers[idx], idx+1)
opr[3]+=1
dfs(numbers[0], 1)
print(maxans)
print(minans)
- dfsλ₯Ό μ΄μ©ν μμ νμμΌλ‘ νμλ€.
- opr λ°°μ΄μ μ μ₯λ μ°μ°μμ κ°μ μ 보λ₯Ό λνκΈ°λ₯Ό λ£λ κ²½μ° opr[0]μ -1νκ³ , dfsλ₯Ό λλ©΄μ λ§μ§λ§ μκΉμ§ λͺ¨λ νμνλ©΄ ν΄λΉ dfsλ₯Ό λΉ μ Έλμ€λ©΄ λ€μ opr[0]μ +1νλ€.
- μ¬κΈ°μ μ£Όμν μ μ μμλ₯Ό μμλ‘ λλλ κ²½μ° C++14 λ₯Ό κΈ°μ€μΌλ‘ νλ€κ³ λμ΄ μλλ°, μ΄λ μμλ‘ λ°κΎΌ λ€ λͺ«μ μ·¨νκ³ , κ·Έ λͺ«μ μμλ‘ λ°κΎΌ κ²κ³Ό κ°λ€.
- μ΄ λΆλΆμ ꡬννκΈ° μν΄ λλκΈ° μ°μ°μ ν΄μ£Όλ λΆλΆμμ curμ΄ μμμ΄λ©΄ λ¨μν μ μ λλμ μ ν΄μ£Όλ κ²μ΄ μλλΌ, μμ λͺ μν λ°©λ²μΌλ‘ λλκΈ° μ°μ°μ νλ€.
- λ μ£Όμν μ μ μ²μμ minansμ maxansλ₯Ό κ°κ° 1e9, -1e9λ‘ μ΄κΈ°ννμλλ°, λ§μ½ μ΅μκ°μ΄ 1000000000μΌ κ²½μ° μ΄κΈ° minansλ³΄λ€ λ μμ κ°μ΄λΌκ³ μΈμνμ§ μμμ minansκ° κ·Έλλ‘ 1000000000.0 μΌλ‘ μΆλ ₯λλ€.
- μ΄ λ¬Έμ λ μ°μ° κ²°κ³Όκ° μ μμ¬μΌ νκΈ° λλ¬Έμ μ΄μ κ°μ μμ ννλ intνμΌλ‘ λ°κΏμ€μΌ νλ€.