πŸ€–/ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ | 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