첫 경험
면접 대비시간 제한8초메모리 제한512 MB
결과, 입력값, 대기 연산자를 저장하는 레지스터를 가진 네 자리 계산기를 시뮬레이션하고, 중간값이 0에서 9999를 벗어나면 E를 출력한다.
문제
아주 오랜 시간 동안 컴퓨터 프로그래밍을 하다 지친 당신은 전자 공작에 흥미를 느꼈다. 첫 작품으로 간단한 계산기를 만들었다. 이 계산기는 최대 네 자리 십진수인 양의 정수를 다루며, 덧셈, 뺄셈, 곱셈을 할 수 있다. 나눗셈은 너무 복잡해서 구현하지 않았다. 계산기는 거의 잘 동작했지만, 몇 가지 경우에 예상치 못한 결과를 표시한다는 것을 알아차렸다. 그래서 예상치 못한 동작의 원인을 밝히기 위해 컴퓨터 프로그램으로 계산기를 시뮬레이션하기로 했다.
만든 계산기의 명세는 다음과 같다. 계산기에는 세 개의 레지스터가 있다. 레지스터 R1은 가장 최근 연산의 결과 값을 저장하고, 레지스터 R2는 새로 입력된 값을 저장하며, 레지스터 R3은 입력된 연산자를 저장한다. 처음에 R1과 R2는 0을, R3은 널 연산자를 가진다. 계산기에는 '0'부터 '9'까지의 십진수 키와 '+', '-', '×', '=' 연산자 키가 있다. 네 연산자는 각각 덧셈, 뺄셈, 곱셈, 종료를 나타낸다. 숫자 키를 누르면 R2에 10을 곱한 뒤 누른 숫자를 더한다. '+', '-', '×'를 누르면 계산기는 먼저 R3에 있는 이항 연산자를 R1과 R2의 값에 적용하고 그 결과로 R1을 갱신한다. R1이 10, R2가 3, R3이 '-' (뺄셈 연산자)라면 R1은 7 (= 10 - 3)로 갱신된다. R3이 널 연산자라면 결과는 R2의 값과 같다. R1을 갱신한 뒤 R2는 0으로 지우고 R3은 사용자가 입력한 연산자로 설정한다. '='는 계산의 종료를 나타낸다. 따라서 '='를 누르면 계산기는 다른 연산자와 같은 방식으로 R3에 있는 연산자를 적용하고 최종 결과를 사용자에게 표시한다. 최종 결과를 표시한 뒤 R3은 널 연산자로 다시 초기화된다.
계산기는 다섯 자리 이상의 십진수를 다룰 수 없다. 따라서 중간 계산 결과가 0보다 작은 값(즉, 음수)이나 9999보다 큰 값이 나오면 계산기는 오류를 뜻하는 “E”를 표시하고, '='를 누를 때까지 나머지 사용자 입력을 무시한다.
여러분의 과제는 이 간단한 계산기를 시뮬레이션하는 프로그램을 작성하는 것이다.
입력
입력은 여러 개의 테스트 케이스로 이루어진다.
입력의 각 줄은 하나의 테스트 케이스를 나타내며, 사용자가 입력한 키 입력 순서를 담는다. 입력은 십진수('0'부터 '9'까지)와 유효한 연산자 '+', '-', '*', '='로만 이루어지며, 여기서 '*'는 '×'를 나타낸다.
'='는 각 줄의 끝에만 나타나고, 각 테스트 케이스의 키 입력은 80개를 넘지 않는다.
입력의 끝은 EOF로 표시된다.
출력
각 테스트 케이스마다 시뮬레이션 결과를 한 줄에 출력한다.