๐Ÿค–/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค | 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