ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Programmers] ์ˆ˜์‹ ์ตœ๋Œ€ํ™” with Python
    PS 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() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ์ƒ๊ฐํ•ด๋ณด์•˜๋Š”๋ฐ, ์‹คํ–‰ ์†๋„์—์„œ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ
      ๊ทธ๋ฆฌ ์ข‹์ง€ ์•Š์€ ํ’€์ด ๋ฐฉ๋ฒ•์ธ ๊ฒƒ ๊ฐ™์•„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค.
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

Designed by Tistory.