1️⃣ 링크
programmers.co.kr/learn/courses/30/lessons/67257
2️⃣ 코드
from itertools import permutations
import re
# expression 이 '50*20+2'인 경우에
def solution(expression):
# {*, +}
operator = set(re.sub('\d','',expression))
# ['50', '*', '20', '+', '2']
expression = re.split('(\D)', expression)
answer = 0
for op_cand in permutations(operator):
tmp = expression
for exp in op_cand:
while exp in tmp:
i = tmp.index(exp)
tmp = tmp[:i-1] + [str(eval(''.join(tmp[i-1:i+2])))] + tmp[i+2:]
answer = max(answer, abs(int(tmp[0])))
return answer
1. expression에 있는 연산자 찾기
2. split 해주기
3. 연산자 우선순위에 따라 계산(for loop)
* eval 식 계산
ex1. eval('5+8') -> 13 (int type의 13이 나옴)
ex2. eval('a = 13') -> error
* exec 문 계산
ex1. exec('5+9') -> error는 발생하지 않지만 사용 불가
ex2. exec('a=5+9') -> a는 int type의 14
* re.split()을 할 때 패턴을 ()로 감싸서 입력하면 매치되는 패턴이 제외되지 않음
digit이 아닌 것을 기준으로 split하는 패턴이 '\D'인데, ()로 감싸서 '(\D)'를 패턴으로 사용하면 digit이 아닌 것(split하는 기준이 된 것)도 제외되지 않음
'Algorithm > Python' 카테고리의 다른 글
[파이썬/백준 1270]전쟁 - 땅따먹기 (0) | 2021.05.11 |
---|---|
[파이썬/프로그래머스]순위검색 (0) | 2021.05.10 |
파이썬 변수 이름의 길이가 프로그램의 효율성에 영향을 줄까? (0) | 2021.05.07 |
[파이썬/백준 1991]트리 순회 (0) | 2021.04.17 |
[파이썬/백준 1389]케빈 베이컨의 6단계 법칙 (0) | 2021.04.17 |