티스토리 뷰
728x90
https://programmers.co.kr/learn/courses/30/lessons/67257
- 해설 :
어떤 수식이 주어질 때 이 수식을 더하기, 빼기, 곱하기의 우선순위를 다르게 하여 계산하고 이 때의 최댓값을 구하는 문제이다.
- 풀이 :
먼저 permutaions()를 이용해 +, -, * 연산자의 모든 우선순위 조합을 만들어놓고 각 우선순위마다 수식을 다르게 계산하면서 최댓값을 찾는 시도를 하였다. 우선순위를 표현할 수 있는 가장 좋은 방법이 우선순위마다 괄호로 묶어서 eval로 한 번에 계산하는 방법이라고 생각하여 queue에 숫자와 연산기호를 나누어서 담은 후 우선순위에 따라 queue에서 pop을 해주며 괄호로 묶어 문자열을 만들었다. 최종적으로 나온 문자열을 eval 연산하여 최댓값을 갱신하며 답을 도출하였다.
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 29 30 31 32 33 34 35 | import re,copy from collections import deque from itertools import permutations def cal(exp): m = -1 for e in permutations(['+','-','*'],3): queue = deque(exp) for i in range(3): a = len(queue) while a > 0: c = queue.popleft() if c == e[i]: queue.append('('+queue.pop() + c + queue.popleft()+')') a -= 1 else: queue.append(c) a -= 1 m = max(abs(eval(''.join(queue))),m) return m def solution(expression): answer = 0 queue = [] exp = [] e = re.split('[+*-]',expression) for i in expression: if not i.isdigit(): queue.append(i) for i in range(len(queue)): exp.append(e[i]) exp.append(queue[i]) exp.append(e[-1]) return cal(exp) | cs |
320x100
'Algorithm > Implementation' 카테고리의 다른 글
(Python) - 프로그래머스 : 전화번호 목록 (0) | 2022.01.19 |
---|---|
(Python) - 프로그래머스 : 튜플 (0) | 2022.01.19 |
(Python) - 프로그래머스 (2018 KAKAO BLIND RECRUITMENT) : [1차] 뉴스 클러스터링 (0) | 2022.01.19 |
(Python) - 프로그래머스 (2019 KAKAO BLIND RECRUITMENT) : 실패율 (0) | 2022.01.19 |
(Python) - 프로그래머스(2020 KAKAO BLIND RECRUITMENT) : 괄호 변환 (0) | 2022.01.19 |
댓글
© 2022 WonSeok, All rights reserved