수식 계산기
면접 대비시간 제한1초메모리 제한128 MB
문자 변수와 이항 +, - 및 전위/후위 ++, --로 이루어진 C 스타일 수식을 계산한 뒤 결과와 등장한 변수의 최종 값을 출력한다.
문제
간단한 C 스타일 수식을 계산하는 문제입니다. 각 수식은 정수 변수와 제한된 연산자만 포함하며, 숫자 상수는 등장하지 않습니다.
변수는 소문자 a부터 z까지 26개가 있습니다. 수식을 계산하기 전, 각 변수의 초깃값은 a = 1, b = 2, ..., z = 26 입니다.
이항 연산자 +와 -(덧셈과 뺄셈)는 일반적인 의미로 사용됩니다. 예를 들어 수식 a + c - d + b의 값은 입니다.
단항 연산자 ++와 --도 사용할 수 있습니다. 이 연산자는 변수 바로 앞(전위)이나 바로 뒤(후위)에 올 수 있습니다.
++가 변수 앞에 오면, 그 변수의 값은 수식 계산에 사용되기 전에 1 증가합니다. 따라서++c - b의 값은 입니다.++가 변수 뒤에 오면, 그 변수의 값은 수식 계산에 사용된 후에 1 증가합니다. 따라서c++ - b의 값은 이며, 계산이 끝난 뒤c는4가 됩니다.--연산자도 같은 방식으로 동작하지만 값을 1 감소시킵니다.
수식은 형식적으로 다음과 같이 계산합니다.
++(또는--)가 앞에 붙은 모든 변수에 대해, 그 변수를 1 증가(또는 감소)시키는 대입문을 기록하고, 변수 앞의 그 연산자를 제거합니다.++(또는--)가 뒤에 붙은 모든 변수에 대해서도 같은 방식으로 처리합니다.- 이제 단항 연산자가 남아 있지 않으므로, 남은 수식을 계산하는 문장을 기록합니다.
- 1단계의 문장들을 먼저 실행하고, 그다음 3단계의 문장을, 마지막으로 2단계의 문장들을 실행합니다.
예를 들어 ++a + b++를 계산하는 것은 a = a + 1, result = a + b, b = b + 1을 차례로 계산하는 것과 같습니다.
입력
첫 번째 줄에는 테스트 케이스의 수 가 주어지고, 이어지는 개의 줄에는 각각 하나의 수식이 주어집니다.
수식 안의 공백은 무시합니다. 모든 입력 수식은 모호하지 않습니다(예: a+++b는 나타나지 않습니다). 한 변수에 전위와 후위 단항 연산자가 동시에 붙는 경우는 없습니다(예: ++a++는 나타나지 않습니다). 각 변수는 한 수식에 최대 한 번만 등장한다고 가정해도 됩니다.
출력
각 테스트 케이스마다, 입력에 주어진 수식에서 공백을 제거한 형태를 Expression: 뒤에 이어서 한 줄에 출력합니다. 다음 줄에는 value = 뒤에 수식 전체의 값을 출력합니다.
그 뒤에는 수식에 등장한 각 변수의 최종 값을 <변수> = <값> 형식으로 한 줄에 하나씩, 변수 이름의 알파벳 순서로 출력합니다. 수식에 실제로 등장한 변수만 출력합니다.