문자열 식이 주어진다.
해당 문자열 식에서 연산의 우선순위를 변경했을 때,
절대값이 가장 큰 경우
그 값을 반환하는 알고리즘이다.
이 문제는 문자열을 원하는 형태로 나누고,
연산의 우선순위를 변경하여 각 값을 계산해본다.
이 값들 중 절대값이 가장 큰 값을 리턴하는 것인데, 이러한 반복 작업과 문자열을 필터링하는 것이 관건이다.
itertools라이브러리, permutations 을 활용해야 한다. permutations는 순열 . combinations는 조합이다.
순열은 중복을 허용하지 않는다. (AB != BA)
정규식을 통해서 문자열을 구분하는 것도 원할하게 쓸줄 알아야한다.
( 풀었음에도 몇 달 지나니 아예 또 못푸는 현상 반복...)
re.split() 함수
re.split('정규식', 문자열) 의 형태로 쓰여진다.
반환은 리스트 형태로 나온다.
from re import split
from itertools import permutations as pm
def solution(expression):
cal = pm(['*', '+', '-']) # 연산순서 종류를 생성한다.
answer = 0
for i in cal :
# split, 정규식 표현으로 구분.
nums = split('[-+*]', expression)
# ['', '-', '*', '-', '+', ''] 처음과 끝 요소는 제거해준다. ([1:-1] 쓴 이유)
cals = split('[\d]+', expression)[1:-1]
for j in i[:2] :
while j in cals:
idx = cals.index(j)
sample = nums[idx] + cals[idx] + nums[idx+1]
nums[idx] = str(eval(sample))
cals.pop(idx)
nums.pop(idx+1)
sample = ''
for x in range(len(cals)):
sample += nums[x] + cals[x]
sample = abs(eval(sample + nums[-1]))
if sample > answer:
answer = sample
return answer
728x90
반응형
'Algorithm > Algorithm' 카테고리의 다른 글
Undirected Graph Adjacency List, Matrix:: 무 방향 그래프, 인접 목록, 행렬 (0) | 2021.05.12 |
---|---|
불량사용자 - 카카오 코딩테스트 (0) | 2021.05.06 |
Binary Search 이진 탐색 이분 탐색 (0) | 2021.05.06 |