RUBY

[프로그래머스] 수식 최대화 | 카카오 본문

PS/Programmers

[프로그래머스] 수식 최대화 | 카카오

RUBY_루비 2020. 10. 28. 23:59

출처:: 2020 카카오 인턴십 programmers.co.kr/learn/courses/30/lessons/67257

분류::

 

1. 문제 이해 및 해결과정

- 숫자와 연산자 분리하기

  1) 정규표현식

expression = re.split('([*-+]{1})',expression) #*,-,+가 있으면 하나의 그룹으로 묶어서 

  2) 

  expression = re.split(r'(\D)',expression) #숫자가 아닌 것을 그룹으로 묶어서

 3) 정규표현식을 안쓰면

    tmp=""
    num=[]
    op=[]
    for x in expression:
        if x=="*" or x=="-" or x=="+":
            num.append(int(tmp))
            op.append(x)
            tmp=""
        else:
            tmp=tmp+x
    num.append(int(tmp))

 

2. 풀이방법

  1. 정규표현식 이용 

- 연산자 우선순위를 적용한 배열을 만들어 두고 

- 현재 식에 우선순위가 높은 연산자가 있으면 계산 -> 연산자끝날때까지 계산해서 결과 저장

- 결과들 중 가장 절대값이 큰 것이 답

import re #정규표현식 모듈
from itertools import permutations
def solution(expression):
    result=[]
    operator=list(permutations(['*','-','+'],3)) #가능한 모든 op경우의 수 
    expression = re.split(r'(\D)',expression) #숫자가 아닌 것을 그룹으로 묶어서
    for oper in operator:
        exp=expression[:]
        for op in oper:
            while op in exp:
                index=exp.index(op) #연산자의 인덱스
                exp[index-1]=str(eval(exp[index-1]+op+exp[index+1])) #연산자 앞 뒤 
                del exp[index:index+2]
        result.append(abs(int(exp[0]))) #exp[0]이 연산결과
    return max(result)

 

3. 오답원인

 

4. 알게된 점

정규표현식 공부를 해야겠다. 

- 정규표현식  hiruby.tistory.com/595

str.eval()

: eval() 은 문자열에서의 연산을 계산하는 함수 

Comments