π€/νλ‘κ·Έλλ¨Έμ€
[νλ‘κ·Έλλ¨Έμ€ | Lv2] μμ μ΅λν (Python) - 2020 μΉ΄μΉ΄μ€ μΈν΄μ
sssbin
2023. 3. 6. 14:34
https://school.programmers.co.kr/learn/courses/30/lessons/67257
νλ‘κ·Έλλ¨Έμ€
μ½λ μ€μ¬μ κ°λ°μ μ±μ©. μ€ν κΈ°λ°μ ν¬μ§μ λ§€μΉ. νλ‘κ·Έλλ¨Έμ€μ κ°λ°μ λ§μΆ€ν νλ‘νμ λ±λ‘νκ³ , λμ κΈ°μ κΆν©μ΄ μ λ§λ κΈ°μ λ€μ λ§€μΉ λ°μΌμΈμ.
programmers.co.kr
μ«μ(num), μ°μ°μ(op)λ₯Ό λΆλ¦¬ν΄μ£Όκ³ μ°μ°μ μ°μ μμ 리μ€νΈ(per)λ₯Ό μμ΄μ ν΅ν΄ λ§λ€μ΄μ€λ€.
perμ μμλλ‘ λλ©΄μ κ° μ°μ°μμ λν΄ κ³μ°μ ν΄μ£Όκ³ ,
(μ°μ°μμ κ°μλ νμ μ«μμ κ°μλ³΄λ€ νλ μ μ, μ°μ°μμ idx -> μ«μ[idx]μ μ«μ[idx+1]μ μ°μ°μ μννλ©΄ λ¨)
κ° μ°μ μμμ λ°λΌ μ λκ°μ μ΅λκ°μ κ°±μ ν΄μ£Όλ©΄ λλ€.
# νλ‘κ·Έλλ¨Έμ€ 67257: μμ μ΅λν (2020 μΉ΄μΉ΄μ€ μΈν΄μ)
import re
from itertools import permutations
def solution(expression):
num = list(map(int, re.split('\+|\-|\*', expression))) # μ«μ
op = re.split('[0-9]+', expression)[1:-1] # μ°μ°μ
per = list(permutations(set(op), len(set(op)))) # μ°μ°μ μ°μ μμ
answer = 0
for p in per:
n = num[:]
o = op[:]
i = 0
while i < len(p):
while p[i] in o:
idx = o.index(p[i])
tmp = o.pop(idx)
if tmp == '+':
n[idx] += n.pop(idx+1)
elif tmp == '-':
n[idx] -= n.pop(idx+1)
else:
n[idx] *= n.pop(idx+1)
i += 1
answer = max(answer, abs(n[0]))
return answer