[νλ‘κ·Έλλ¨Έμ€/python] 2020 μΉ΄μΉ΄μ€ μΈν΄μ : μμ μ΅λν
λ¬Έμ μ€λͺ
IT λ²€μ² νμ¬λ₯Ό μ΄μνκ³ μλ λΌμ΄μΈμ 맀λ
μ¬λ΄ ν΄μ»€ν€ λνλ₯Ό κ°μ΅νμ¬ μ°μΉμμκ² μκΈμ μ§κΈνκ³ μμ΅λλ€.
μ΄λ² λνμμλ μ°μΉμμκ² μ§κΈλλ μκΈμ μ΄μ λνμλ λ€λ₯΄κ² λ€μκ³Ό κ°μ λ°©μμΌλ‘ κ²°μ νλ €κ³ ν©λλ€.
ν΄μ»€ν€ λνμ μ°Έκ°νλ λͺ¨λ μ°Έκ°μλ€μκ²λ μ«μλ€κ³Ό 3κ°μ§μ μ°μ°λ¬Έμ(+, -, *) λ§μΌλ‘ μ΄λ£¨μ΄μ§ μ°μ° μμμ΄ μ λ¬λλ©°, μ°Έκ°μμ λ―Έμ
μ μ λ¬λ°μ μμμ ν¬ν¨λ μ°μ°μμ μ°μ μμλ₯Ό μμ λ‘κ² μ¬μ μνμ¬ λ§λ€ μ μλ κ°μ₯ ν° μ«μλ₯Ό μ μΆνλ κ²μ
λλ€.
λ¨, μ°μ°μμ μ°μ μμλ₯Ό μλ‘ μ μν λ, κ°μ μμμ μ°μ°μλ μμ΄μΌ ν©λλ€. μ¦, + > - > * λλ - > * > + λ±κ³Ό κ°μ΄ μ°μ°μ μ°μ μμλ₯Ό μ μν μ μμΌλ +,* > - λλ * > +,-μ²λΌ 2κ° μ΄μμ μ°μ°μκ° λμΌν μμλ₯Ό κ°μ§λλ‘ μ°μ°μ μ°μ μμλ₯Ό μ μν μλ μμ΅λλ€. μμμ ν¬ν¨λ μ°μ°μκ° 2κ°λΌλ©΄ μ μν μ μλ μ°μ°μ μ°μ μμ μ‘°ν©μ 2! = 2κ°μ§μ΄λ©°, μ°μ°μκ° 3κ°λΌλ©΄ 3! = 6κ°μ§ μ‘°ν©μ΄ κ°λ₯ν©λλ€.
λ§μ½ κ³μ°λ κ²°κ³Όκ° μμλΌλ©΄ ν΄λΉ μ«μμ μ λκ°μΌλ‘ λ³ννμ¬ μ μΆνλ©° μ μΆν μ«μκ° κ°μ₯ ν° μ°Έκ°μλ₯Ό μ°μΉμλ‘ μ μ νλ©°, μ°μΉμκ° μ μΆν μ«μλ₯Ό μ°μΉμκΈμΌλ‘ μ§κΈνκ² λ©λλ€.
μλ₯Ό λ€μ΄, μ°Έκ°μ μ€ λ€μ€κ° μλμ κ°μ μμμ μ λ¬λ°μλ€κ³ κ°μ ν©λλ€.
"100-200*300-500+20"
μΌλ°μ μΌλ‘ μν λ° μ μ°νμμ μ½μλ μ°μ°μ μ°μ μμμ λ°λ₯΄λ©΄ λνκΈ°μ λΉΌκΈ°λ μλ‘ λλ±νλ©° κ³±νκΈ°λ λνκΈ°, λΉΌκΈ°μ λΉν΄ μ°μ μμκ° λμ * > +,- λ‘ μ°μ μμκ° μ μλμ΄ μμ΅λλ€.
λν κ·μΉμ λ°λΌ + > - > * λλ - > * > + λ±κ³Ό κ°μ΄ μ°μ°μ μ°μ μμλ₯Ό μ μν μ μμΌλ +,* > - λλ * > +,- μ²λΌ 2κ° μ΄μμ μ°μ°μκ° λμΌν μμλ₯Ό κ°μ§λλ‘ μ°μ°μ μ°μ μμλ₯Ό μ μν μλ μμ΅λλ€.
μμμ μ°μ°μκ° 3κ° μ£Όμ΄μ‘μΌλ―λ‘ κ°λ₯ν μ°μ°μ μ°μ μμ μ‘°ν©μ 3! = 6κ°μ§μ΄λ©°, κ·Έ μ€ + > - > * λ‘ μ°μ°μ μ°μ μμλ₯Ό μ νλ€λ©΄ κ²°κ΄κ°μ 22,000μμ΄ λ©λλ€.
λ°λ©΄μ * > + > - λ‘ μ°μ°μ μ°μ μμλ₯Ό μ νλ€λ©΄ μμμ κ²°κ΄κ°μ -60,420 μ΄μ§λ§, κ·μΉμ λ°λΌ μ°μΉ μ μκΈμ μ λκ°μΈ 60,420μμ΄ λ©λλ€.
μ°Έκ°μμκ² μ£Όμ΄μ§ μ°μ° μμμ΄ λ΄κΈ΄ λ¬Έμμ΄ expressionμ΄ λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, μ°μΉ μ λ°μ μ μλ κ°μ₯ ν° μκΈ κΈμ‘μ return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ.
μ ν μ¬ν
- expressionμ κΈΈμ΄κ° 3 μ΄μ 100 μ΄νμΈ λ¬Έμμ΄μ λλ€.
- expressionμ 곡백문μ, κ΄νΈλ¬Έμ μμ΄ μ€λ‘μ§ μ«μμ 3κ°μ§μ μ°μ°μ(+, -, *) λ§μΌλ‘ μ΄λ£¨μ΄μ§ μ¬λ°λ₯Έ μ€μνκΈ°λ²(μ°μ°μ λ λμ μ¬μ΄μ μ°μ°κΈ°νΈλ₯Ό μ¬μ©νλ λ°©μ)μΌλ‘ ννλ μ°μ°μμ
λλ€. μλͺ»λ μ°μ°μμ μ
λ ₯μΌλ‘ μ£Όμ΄μ§μ§ μμ΅λλ€.
- μ¦, "402+-561*"μ²λΌ μλͺ»λ μμμ μ¬λ°λ₯Έ μ€μνκΈ°λ²μ΄ μλλ―λ‘ μ£Όμ΄μ§μ§ μμ΅λλ€.
- expressionμ νΌμ°μ°μ(operand)λ 0 μ΄μ 999 μ΄νμ μ«μμ
λλ€.
- μ¦, "100-2145*458+12"μ²λΌ 999λ₯Ό μ΄κ³Όνλ νΌμ°μ°μκ° ν¬ν¨λ μμμ μ λ ₯μΌλ‘ μ£Όμ΄μ§μ§ μμ΅λλ€.
- "-56+100"μ²λΌ νΌμ°μ°μκ° μμμΈ μμλ μ λ ₯μΌλ‘ μ£Όμ΄μ§μ§ μμ΅λλ€.
- expressionμ μ μ΄λ 1κ° μ΄μμ μ°μ°μλ₯Ό ν¬ν¨νκ³ μμ΅λλ€.
- μ°μ°μ μ°μ μμλ₯Ό μ΄λ»κ² μ μ©νλλΌλ, expressionμ μ€κ° κ³μ°κ°κ³Ό μ΅μ’ κ²°κ΄κ°μ μ λκ°μ΄ 263 - 1 μ΄νκ° λλλ‘ μ λ ₯μ΄ μ£Όμ΄μ§λλ€.
- κ°μ μ°μ°μλΌλ¦¬λ μμ μλ κ²μ μ°μ μμκ° λ λμ΅λλ€.
μ λ΅
from itertools import permutations
def solution(expression):
answer = 0
expression = expression.replace("-", " - ").replace("+", " + ").replace("*", " * ").split()
operator = [i for i in ['*', '+', '-'] if i in expression]
for op in permutations(operator, len(operator)):
calcul = expression.copy()
for o in op:
while o in calcul:
i = calcul.index(o)
calcul = calcul[:i-1] + [str(eval(''.join(calcul[i-1:i+2])))] + calcul[i+2:]
answer = max(answer, (abs(int(calcul[0]))))
return answer
expressionμ κ°μ " "λ₯Ό κΈ°μ€μΌλ‘ split νκΈ° μν΄ expressionμ μ°μ°μλ₯Ό μλ€ λμ΄μ°κΈ°λ₯Ό λ£μ΄ replaceνλ€.
operatorμλ expressionμ μ¬μ©λ μ°μ°μλ₯Ό λ£μ΄μ€λ€.
permutationsλ₯Ό μ΄μ©νμ¬ μ°μ°μμ μμ΄μ ꡬνκ³
expressionμ copyν calculμ μμ νλ©΄μ κ³μ°νλ€.
μ°μ μμ 첫 λ²μ§Έκ° *μΌ κ²½μ°λ₯Ό μλ₯Ό λ€λ©΄,
calculμμ *μ μμΉλ₯Ό μ°Ύμ iμ μ μ₯νλ©΄ i-1μ μ μ«μ, i+1μ λ· μ«μκ° λ κ²μ΄λ€.
calculμ μΈλ±μ€ i-1λΆν° i+1κΉμ§μ κ°μ joinνμ¬ eval ν¨μλ₯Ό ν΅ν΄ κ³μ° ν
κ³μ°μ μ°μΈ 3κ°μ κ° μ리μ λ£μ΄ μ΄μ΄λΆμΈλ€.
π₯ calcul = expressionμ ννλ‘ λ³΅μ¬νλ©΄ calculμ μμ ν λ expressionλ ν¨κ» λ°λλ―λ‘ copyν΄μΌνλ€.
π₯ evalμ λ¬Έμμ΄ ννμ μμμ κ³μ°ν΄μ£Όλ ν¨μμ΄λ€.
μ κ³Όμ μ λ°λ³΅νλ©΄μ λͺ¨λ μ°μ°μλ₯Ό κ³μ°νμ λ calculμλ μ«μ νλλ§ λ¨μμμΌλ―λ‘ calcul[0]κ³Ό answerμ λΉκ΅νμ¬ μ΅λκ°μ answerμ κ°±μ νλ€.
permutationsμ μμΈν μ€λͺ μ μλμ ν¬μ€ν μ μ°Έκ³ νλ©΄ λλ€.