(+, -, *, /)를 사용하여 수학 표현식을 나타내는 문자열이 있다고 가정합니다. 여기서 /는 정수 나누기를 나타내며 내장 함수를 사용하지 않고 결과를 평가하고 반환해야 합니다.
따라서 입력이 s ="2+3*5/7"과 같으면 출력은 2 + ((3 * 5) / 7) =4
와 같이 4가 됩니다.이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- :=주어진 문자열을 뒤집습니다.
- get_value() 함수를 정의합니다.
- 기호 :=1
- s가 비어 있지 않고 s의 마지막 요소가 "-"와 같으면
- s에서 마지막 요소 삭제
- 기호 :=-1
- 값:=0
- s가 비어 있지 않고 s의 마지막 요소가 숫자인 동안 do
- 값 :=값 * 10
- value :=value + s의 마지막 요소의 숫자 값, s의 마지막 요소 삭제
- 반환 기호 * 값
- get_term() 함수 정의
- 용어:=get_value()
- s가 비어 있지 않고 s의 마지막 요소가 * 또는 /인 동안 do
- op :=s의 마지막 요소 및 s의 마지막 요소 삭제
- 값:=get_value()
- op가 "*"와 같으면
- 용어 :=용어 * 값
- 그렇지 않으면
- term :=(1.0 * term / value) 의 하한선
- 반환 기간
- 기본 방법에서 다음을 수행합니다.
- an :=get_term()
- s가 비어 있지 않은 동안 do
- op :=s의 마지막 요소, s에서 삭제
- 용어:=get_term()
- op가 "+"와 같으면
- ans :=ans + 용어
- 그렇지 않으면
- ans :=ans - 용어
- 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
from math import floor, trunc class Solution: def solve(self, s): s = list(s[::-1]) def get_value(): sign = 1 if s and s[-1] == "-": s.pop() sign = -1 value = 0 while s and s[-1].isdigit(): value *= 10 value += int(s.pop()) return sign * value def get_term(): term = get_value() while s and s[-1] in "*/": op = s.pop() value = get_value() if op == "*": term *= value else: term = floor(1.0 * term / value) return term ans = get_term() while s: op, term = s.pop(), get_term() if op == "+": ans += term else: ans -= term return ans ob = Solution() s = "2+3*5/7" print(ob.solve(s))
입력
"2+3*5/7"
출력
4