일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 시간복잡도
- coding
- lv4
- import re
- 데이터분석
- 완전탐색
- 파이썬
- coding test
- 프로그래머스
- CodingTest
- collections
- counter
- sql
- 연습문제
- Level2
- mysql
- itertools
- Queue
- 코테
- join
- python
- level4
- lambda
- 조합
- programmers
- BFS
- Stack
- 코딩테스트
- time complexity
- 코딩
- Today
- Total
ror_coding
[Programmers] [카카오 인턴] 수식 최대화 - 67257 본문
728x90
728x90
eval을 이용해서 연산 !
Question
수식에 연산자가 3개 주어졌으므로 가능한 연산자 우선순위 조합은 3! = 6가지이며, 그 중 + > - > * 로 연산자 우선순위를 정한다면 결괏값은 22,000원이 됩니다.
반면에 * > + > - 로 연산자 우선순위를 정한다면 수식의 결괏값은 -60,420 이지만, 규칙에 따라 우승 시 상금은 절댓값인 60,420원이 됩니다.
참가자에게 주어진 연산 수식이 담긴 문자열 expression이 매개변수로 주어질 때, 우승 시 받을 수 있는 가장 큰 상금 금액을 return 하도록 solution 함수를 완성해주세요.
- expression은 길이가 3 이상 100 이하인 문자열입니다.
- expression은 공백문자, 괄호문자 없이 오로지 숫자와 3가지의 연산자(+, -, *) 만으로 이루어진 올바른 중위표기법(연산의 두 대상 사이에 연산기호를 사용하는 방식)으로 표현된 연산식입니다. 잘못된 연산식은 입력으로 주어지지 않습니다.
- 즉, "402+-561*"처럼 잘못된 수식은 올바른 중위표기법이 아니므로 주어지지 않습니다.
- expression의 피연산자(operand)는 0 이상 999 이하의 숫자입니다.
- 즉, "100-2145*458+12"처럼 999를 초과하는 피연산자가 포함된 수식은 입력으로 주어지지 않습니다.
- "-56+100"처럼 피연산자가 음수인 수식도 입력으로 주어지지 않습니다.
- expression은 적어도 1개 이상의 연산자를 포함하고 있습니다.
- 연산자 우선순위를 어떻게 적용하더라도, expression의 중간 계산값과 최종 결괏값은 절댓값이 263 - 1 이하가 되도록 입력이 주어집니다.
- 같은 연산자끼리는 앞에 있는 것의 우선순위가 더 높습니다.
Point
- operations 6가지 경우의 수를 미리 선언해줍니다. 그렇게 되면 피연산자가 2개일 때도 오류 없이 진행이 가능합니다. (split을 사용하기 때문에 존재하지 않는 피연산자라면 split 없이 원래 값이 return 되기 때문입니다.)
- 이때 피연산자 a -> b 순서대로 split을 하기 때문에, 실제 연산되는 순서는 c -> b -> a 입니다.
- 우선 연산을 위해 split 할 때 ( ) 괄호를 붙여 우선 연산자로 만듭니다.
Code
def solution(expression):
answer = []
operations = [('-','+','*'),('-','*','+'),('+','-','*'),('+','*','-'),('*','+','-'),('*','-','+')]
for a,b,c in operations:
lst = []
for e in expression.split(a):
tmp = [ f'({i})' for i in e.split(b) ]
lst.append( f'({b.join(tmp)})')
answer.append(abs(eval(f'{a.join(lst)}')))
return max(answer)
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/020.gif)
now me
On my github
728x90
'Algorithm > Python' 카테고리의 다른 글
[Python] reduce (functools) (0) | 2025.01.16 |
---|---|
[Programmers] 괄호 변환 - 60058 (0) | 2024.12.31 |
[Programmers] 줄 서는 방법 - 12936 (0) | 2024.12.31 |
[Programmers] 무인도 여행 - 154540 (0) | 2024.12.30 |
[Programmers] [3차] 방금그곡 - 17683 (1) | 2024.12.30 |