Skip to content

Latest commit

 

History

History
42 lines (37 loc) · 2.35 KB

풀이_수식최대화.md

File metadata and controls

42 lines (37 loc) · 2.35 KB

🎀 프로그래머스 수식 최대화

  • Date : 2020.09.13(일)
  • Time : 60분.. 해답 봤습니닷

문제

  • 해커톤 대회에 참가하는 모든 참가자들에게는 숫자들과 3가지의 연산문자(+, -, *) 만으로 이루어진 연산 수식이 전달되며, 참가자의 미션은 전달받은 수식에 포함된 연산자의 우선순위를 자유롭게 재정의하여 만들 수 있는 가장 큰 숫자를 제출하는 것입니다. 만약 계산된 결과가 음수라면 해당 숫자의 절댓값으로 변환하여 제출하며 제출한 숫자가 가장 큰 참가자를 우승자로 선정하며, 우승자가 제출한 숫자를 우승상금으로 지급하게 됩니다. 참가자에게 주어진 연산 수식이 담긴 문자열 expression이 매개변수로 주어질 때, 우승 시 받을 수 있는 가장 큰 상금 금액을 return 하도록 solution 함수를 완성해주세요.

코드 풀이

    op = [list(y) for y in permutations(['*','+','-'])]
    # 세 부호로 만들 수 있는 조합을 다 만들어서 리스트로 저장합니다.
    ex = re.split('(\D)',expression)
    #그리고 받아온 수식을 숫자와 부호로 나누는 과정을 진행합니다.

: 저 \D의 의미를 이번에 알게되었다. 이 특수기호가 정규표현식 역할을 하는 것 같다.

특수기호 의미
\\ 백슬래시(\)
\d 숫자
\D 숫자 외의 문자
\s 공백 문자
\S 공백 문자 외의 문자
\w 숫자/한글/알파벳 등을 포함한 문자
\W 문자 외의 기호

while y in copyex:
    tmp = copyex.index(y)
    #문자열안에서 부호 위치를 찾아내서 인덱스를 저장한다.
    copyex[tmp-1] = str(eval(copyex[tmp-1]+copyex[tmp]+copyex[tmp+1]))
    #그래서 그 수식 (앞 숫자 & 수식 & 뒷 숫자)를 eval을 사용해서 문자열 수식 계산을 한다.
    #그리고 그 계산한 값을 앞 숫자 위치에 껴둔다.
    copyex = copyex[:tmp]+copyex[tmp+2:]
    #그리고 수식 & 뒷수식을 없애기 위해 슬라이싱으로 다시 문자열을 만들어준다.
a.append(copyex[-1]) #총계산된값을 저장해둔다.

:eval은 문자열을 수식으로 계산해주는 역학을 한다. 굳이 int형 변환을 거치지 않아도 되는 것이다.