PS

[Programmers] ์ˆ˜์‹ ์ตœ๋Œ€ํ™” with Python

ํ˜•์ค€_It's 2021. 8. 29. 02:34
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ Programmers - [์ˆ˜์‹ ์ตœ๋Œ€ํ™”]

๐Ÿ’ก ์กฐ๊ฑด ๋ฐ ํ’€์ด

  1. ๊ณ„์‚ฐ ๊ฐ€๋Šฅํ•œ ์ˆ˜์‹์ด ์žˆ๋Š” expression ์ด ์ฃผ์–ด์ง€๋ฉฐ, ๊ธธ์ด๊ฐ€ 3์ด์ƒ 100์ดํ•˜์ธ ๋ฌธ์ž์—ด.
  2. ์—ฐ์‚ฐ์ž๋Š” +, -, * ๋งŒ ์žˆ๋‹ค. ํ”ผ์—ฐ์‚ฐ์ž๋Š” 0 ์ด์ƒ 999 ์ดํ•˜๋‹ค.
  3. ๊ฐ™์€ ์—ฐ์‚ฐ์ž๋Š” ์•ž์— ์žˆ๋Š” ๊ฒƒ์ด ๋” ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’๋‹ค.
  4. ์—ฐ์‚ฐ์ž์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ•ด์„œ ๊ทธ๊ฒƒ ๋จผ์ € ๊ณ„์‚ฐํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
  5. ๊ณ„์‚ฐ๋œ ์Œ์ˆ˜๋Š” ์–‘์ˆ˜๋กœ ๋ฐ”๊พธ์–ด์„œ ์ตœ๋Œ“๊ฐ’ ๊ณ„์‚ฐ์„ ํ•œ๋‹ค.

๐Ÿ–ฅ ์†Œ์Šค ์ฝ”๋“œ

from itertools import permutations as pt


def solution(expression):
    answer = -1e9
    op, nums = [], []
    a, b = -1, -1
    new_ex = []

    for i in range(len(expression)):
        if expression[i].isnumeric():
            if a < 0:
                a = i
            else:
                b = i
        else:
            if b < 0:
                b = a

            op.append(expression[i])
            nums.append((a, b))
            new_ex.append(int(expression[a:b+1]))
            new_ex.append(expression[i])
            a, b = -1, -1
    if b > -1:
        new_ex.append(int(expression[a:b+1]))
    else:
        new_ex.append(int(expression[a]))

    k = list(set(op))
    for case in list(set(pt(k, len(k)))):
        temp_new_ex = new_ex[:]
        for j in case:
            while j in temp_new_ex:
                idx = temp_new_ex.index(j)
                if j == '*':
                    temp = temp_new_ex[idx - 1] * temp_new_ex[idx + 1]
                elif j == '-':
                    temp = temp_new_ex[idx - 1] - temp_new_ex[idx + 1]
                else:
                    temp = temp_new_ex[idx - 1] + temp_new_ex[idx + 1]

                temp_new_ex = temp_new_ex[:idx - 1] + [temp] + temp_new_ex[idx + 2:]
        answer = max(answer, abs(temp_new_ex[0]))

    return answer

๐Ÿ”– ์˜ˆ์ œ ๋ฐ ์‹คํ–‰๊ฒฐ๊ณผ

์˜ˆ์ œ

expression = "100-200*300-500+20"
expression = "50*6-3*2"

์‹คํ–‰๊ฒฐ๊ณผ

60420
300

โŒจ๏ธ ๋ฌธ์ œ ํ’€์ด

  1. ๋‹ต์œผ๋กœ ๋ฐ˜ํ™˜ํ•  answer๋ฅผ -1e9๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
  2. ์ž…๋ ฅ๋ฐ›์€ expression์˜ ์ •๋ณด๋ฅผ ๋‹ด์„ ๋ณ€์ˆ˜๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ ,
    ๋ฌธ์ž์—ด์—์„œ ์—ฐ์‚ฐ์ž๋ฅผ ๊ตฌ๋ถ„ํ•œ ๋’ค ์ˆซ์ž๋Š” ์ •์ˆ˜ํ˜• ๋ณ€์ˆ˜๋กœ ๋ณ€ํ™˜์‹œ์ผœ ๊ฐ๊ฐ ๋ฆฌ์ŠคํŠธ์— ๋‹ด๋Š”๋‹ค.
  3. ์—ฐ์‚ฐ์ž์˜ ์šฐ์„ ์ˆœ์œ„๋Š” itertools ์˜ permutaions ๋ฅผ ์‚ฌ์šฉํ•ด ์ˆœ์—ด์„ ๋งŒ๋“  ํ›„
    set()์„ ํ†ตํ•ด ์ˆœ์—ด์˜ ์ค‘๋ณต์„ ์—†์•ด๋‹ค.
  4. ๊ฐ ์ˆœ์—ด์„ ํ•˜๋‚˜์”ฉ for ๋ฌธ์œผ๋กœ ๊บผ๋‚ด๊ณ , ๊ทธ ์ˆœ์—ด์˜ ์›์†Œ๋ฅผ ๋Œ๋ฉฐ ์ตœ๋Œ“๊ฐ’์„ ๊ณ„์‚ฐํ•œ๋‹ค.
  5. ์ฃผ์–ด์ง€๋Š” ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ ๋งค์šฐ ๊ธธ์ง€ ์•Š์€ ์ 
    python ์–ธ์–ด์˜ list์™€ ๋ฌธ์ž์—ด์— ์žˆ๋Š” index() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉ.
  6. ๋ฆฌ์ŠคํŠธ์˜ index() ํ•จ์ˆ˜๋Š” ์ฐพ๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ๊ฒƒ์„ ๋ฐ˜ํ™˜
    ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์€ ์—ฐ์‚ฐ์ž์ธ ๊ฒฝ์šฐ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์•ž์— ์žˆ๋‹ค๋Š” ์ ์„ ๋งŒ์กฑํ•œ๋‹ค
  7. ํ•ด๋‹นํ•˜๋Š” ์ธ๋ฑ์Šค์˜ ์—ฐ์‚ฐ์ž ์•ž ๋’ค์˜ ์ˆซ์ž๋ฅผ ์—ฐ์‚ฐ์ž์— ๋งž๊ฒŒ ๊ณ„์‚ฐ ํ›„,
    ๊ณ„์‚ฐํ•œ ์—ฐ์‚ฐ์ž์™€ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋บ€ ์ž๋ฆฌ์— ๊ณ„์‚ฐ๊ฐ’์„ ๋„ฃ์Œ
  8. ๋ฐ˜๋ณตํ•˜์—ฌ 1๊ฐœ ๋‚จ์€ ์›์†Œ ์ฆ‰, ์ˆ˜์‹์˜ ์ตœ์ข… ๊ณ„์‚ฐ๊ฐ’์„ answer ์™€ ๋น„๊ตํ•ด ํฐ ๊ฐ’์œผ๋กœ ๊ต์ฒดํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
    ๋ฎฌ๋ก  ์Œ์ˆ˜๋Š” abs() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ์–‘์ˆ˜๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ์—ˆ๋‹ค.

๐Ÿ’พ ๋А๋‚€์ 

  • ์ •๊ทœํ‘œํ˜„์‹์œผ๋กœ ์—ฐ์‚ฐ์ž์™€ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ถ”์ถœํ•ด์„œ ํ’€๋ฉด,
    ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๋” ์ค„ ์ˆ˜๋„ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.
  • ์ •๊ทœํ‘œํ˜„์‹์„ ๋” ๊ณต๋ถ€ํ•˜๊ณ  ์—ฐ์Šตํ•ด๋ณด์•„์•ผ๊ฒ ๋‹ค.
  • ์ด๋ณด๋‹ค expression์˜ ๊ธธ์ด๊ฐ€ ๋” ๊ธธ์–ด ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚  ๋•Œ๋Š” ์–ด๋–ป๊ฒŒ ํ•  ๊ฒƒ์ธ์ง€
    ์—ฐ์‚ฐ์„ ๋” ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•ด๋ด์•ผ๊ฒ ๋‹ค.
  • ๊ด„ํ˜ธ๋ฅผ ๋„ฃ์–ด eval() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ์ƒ๊ฐํ•ด๋ณด์•˜๋Š”๋ฐ, ์‹คํ–‰ ์†๋„์—์„œ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ
    ๊ทธ๋ฆฌ ์ข‹์ง€ ์•Š์€ ํ’€์ด ๋ฐฉ๋ฒ•์ธ ๊ฒƒ ๊ฐ™์•„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค.
๋ฐ˜์‘ํ˜•