Algorithm/programmers/2020 카카오 인턴십/level2/ 수식 최대화(with python)
📖 문제
📝 풀이 과정
- 주어진 연산식
expression
에서 연산자와 피연산자들을 각각 다른 리스트에 담는다.
- python의
permutations
모듈을 사용하여 연산자 *, +, -
의 순열을 모두 구한다.
-> 우선순위를 결정(좌측에 있을수록 우선순위가 높다)
- 2번에서 구한 모든 우선순위에 대해 연산식
expression
을 계산하는 함수calculation
을 호출한다. 그리고 그 리턴값을 리스트 result
에 저장
- 리스트
result
에 있는 요소들 중 최댓값이 정답
⌨ 코드
from itertools import permutations as p
import re
# priority라는 우선순위에 따라 expression을 계산한 결과를 리턴하는 함수
def calculation(operators, operands, priority):
priority = list(priority)
# operators와 operands의 원본 리스트의 손상을 방지하기 위해 다른 리스트에 담아서 사용
operat = operators[:]
operan = operands[:]
for cur_op in priority:
while True:
if cur_op in operat:
# 현재 연산자의 위치(인덱스)를 찾는다.
op_idx = operat.index(cur_op)
else:
break
if cur_op == '*':
operan[op_idx] = operan[op_idx] * operan[op_idx+1]
elif cur_op == '+':
operan[op_idx] = operan[op_idx] + operan[op_idx+1]
elif cur_op == '-':
operan[op_idx] = operan[op_idx] - operan[op_idx+1]
# 계산 후 필요없는 요소들 제거
operan.pop(op_idx+1)
operat.pop(op_idx)
return operan[0] if operan[0] > 0 else -operan[0]
def solution(expression):
# '+', '-', '*'의 우선순위로 가능한 모든 경우에 대한 연산 결과를 담는 리스트
result = []
operand = ['+', '-', '*']
# 피연산자를 담는 리스트
operands = list(map(int,re.split('[*+-]', expression)))
# 연산자를 담는 리스트
operators = list(re.split('[0-9]+', expression))[1:-1]
# p(operand,3) : '+','-','*'의 우선순위로 가능한 모든 경우를 담은 리스트
for priority in p(operand,3):
result.append(calculation(operators, operands, priority))
return max(result)
Author And Source
이 문제에 관하여(Algorithm/programmers/2020 카카오 인턴십/level2/ 수식 최대화(with python)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@yellowsummer/Algorithmprogrammers2020-카카오-인턴십-level2-수식-최대화with-python
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
expression
에서 연산자와 피연산자들을 각각 다른 리스트에 담는다.permutations
모듈을 사용하여 연산자 *, +, -
의 순열을 모두 구한다.-> 우선순위를 결정(좌측에 있을수록 우선순위가 높다)
expression
을 계산하는 함수calculation
을 호출한다. 그리고 그 리턴값을 리스트 result
에 저장result
에 있는 요소들 중 최댓값이 정답from itertools import permutations as p
import re
# priority라는 우선순위에 따라 expression을 계산한 결과를 리턴하는 함수
def calculation(operators, operands, priority):
priority = list(priority)
# operators와 operands의 원본 리스트의 손상을 방지하기 위해 다른 리스트에 담아서 사용
operat = operators[:]
operan = operands[:]
for cur_op in priority:
while True:
if cur_op in operat:
# 현재 연산자의 위치(인덱스)를 찾는다.
op_idx = operat.index(cur_op)
else:
break
if cur_op == '*':
operan[op_idx] = operan[op_idx] * operan[op_idx+1]
elif cur_op == '+':
operan[op_idx] = operan[op_idx] + operan[op_idx+1]
elif cur_op == '-':
operan[op_idx] = operan[op_idx] - operan[op_idx+1]
# 계산 후 필요없는 요소들 제거
operan.pop(op_idx+1)
operat.pop(op_idx)
return operan[0] if operan[0] > 0 else -operan[0]
def solution(expression):
# '+', '-', '*'의 우선순위로 가능한 모든 경우에 대한 연산 결과를 담는 리스트
result = []
operand = ['+', '-', '*']
# 피연산자를 담는 리스트
operands = list(map(int,re.split('[*+-]', expression)))
# 연산자를 담는 리스트
operators = list(re.split('[0-9]+', expression))[1:-1]
# p(operand,3) : '+','-','*'의 우선순위로 가능한 모든 경우를 담은 리스트
for priority in p(operand,3):
result.append(calculation(operators, operands, priority))
return max(result)
Author And Source
이 문제에 관하여(Algorithm/programmers/2020 카카오 인턴십/level2/ 수식 최대화(with python)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yellowsummer/Algorithmprogrammers2020-카카오-인턴십-level2-수식-최대화with-python저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)