문제 › 035

035. 수식 파서

Hard 바이브코딩 MCPParserMath
문제 설명
[문제] 사칙연산 수식을 다루는 MCP 서버를 구현한다. 입력 수식은 토큰(숫자, 연산자, 괄호) 사이가 공백으로 구분된 문자열이다. 예: "3 + 4 * 2". 지원하는 연산은 더하기(+), 빼기(-), 곱하기(*), 나누기(/)와 괄호 ( ) 다. 곱하기/나누기는 더하기/빼기보다 우선순위가 높다. 예를 들어 3 + 4 * 2 는 4*2 를 먼저 계산해 3 + 8 = 11 이 된다. 후위 표기법(postfix, RPN)이란 연산자를 피연산자 뒤에 쓰는 표기법이다. 중위 표기 3 + 4 * 2 는 후위 표기로 "3 4 2 * +" 가 된다(곱을 먼저 한 뒤 더한다는 뜻). [구현할 함수] - parse_expression(expression: str) -> List[str] 수식을 공백 기준으로 토큰 분리해 배열로 반환한다. 숫자, 연산자, 괄호 모두 각각 하나의 토큰이다. - evaluate(expression: str) -> float 수식을 연산자 우선순위와 괄호를 고려해 계산한 값을 실수로 반환한다. - to_postfix(expression: str) -> str 중위 표기 수식을 후위 표기 문자열로 변환해 반환한다. 토큰 사이는 공백 하나로 구분한다. [입력·상태] 별도 상태는 없다. 입력은 토큰이 공백으로 구분된 유효한 중위 표기 수식 문자열이다. [제약] - 지원 연산자: + - * / 와 괄호 ( ). - 곱하기/나누기가 더하기/빼기보다 우선순위가 높고, 괄호가 가장 우선한다. - evaluate 의 반환은 실수(float)다. [힌트] 중위 -> 후위 변환은 "스택을 이용한 연산자 우선순위 처리"(Shunting-yard 알고리즘) 개념을 사용한다. 스택 자료구조는 Python list, C++ std::stack, Java java.util.Deque 등으로 구현할 수 있다. [예시] parse_expression("3 + 4 * 2") -> ["3", "+", "4", "*", "2"] evaluate("3 + 4 * 2") -> 11.0 # 곱셈 우선 to_postfix("3 + 4 * 2") -> "3 4 2 * +"
로그인하고 풀기 AI가 자동 채점하고 즉시 정답·해설을 알려줘요. 무료.