| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1 초 (추가 시간 없음) | 256 MB | 663 | 140 | 82 | 18.304% |
현석이는 기말고사 대비를 위해 화학 문제를 풀고 있다. 화학 문제를 풀던 도중 공학용 계산기를 홈베에 두고 온 것이 기억났다. 홈베에 너무 내려가기 귀찮은 현석이는 그냥 코딩을 해서 계산기를 만들기로 했다.
현석이의 계산기는 +, -, *, /, ^, (, ), # 연산자를 지원한다. 각각 덧셈, 뺄셈, 곱셈, 나눗셈, 거듭제곱, 여는 괄호와 닫는 괄호, 제곱근을 의미하며, 제곱근 연산자는 #5 또는 #(1+2) 와 같이 제곱근을 구하고자 하는 식의 앞에 붙는다. 그리고 식을 계산하기 위해서는 식을 전부 입력하고 난 뒤 마지막에 = 버튼을 눌러야 한다. 계산기가 처리할 수 있는 입력을 엄밀하게 표현하면 다음과 같다.
<input> ::= <expr> "="
<expr> ::= <term> | <term> ("+" | "-") <expr>
<term> ::= <factor> | <factor> ("*" | "/") <term>
<factor> ::= <power> | <power> "^" <factor>
<power> ::= "#" <power> | <root>
<root> ::= <num> | "(" <expr> ")"
<num> ::= "0" | <non-zero> <digit>*
<digit> ::= "0" | <non-zero>
<non-zero> ::= "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
연산자의 우선순위는 괄호 > 제곱근 > 거듭제곱 > 곱셈과 나눗셈 > 덧셈과 뺄셈 순이며, 우선순위가 같은 연산자가 여럿 있는 경우 제곱근과 거듭제곱을 제외한 연산자는 왼쪽부터 오른쪽으로, 제곱근과 거듭제곱은 오른쪽부터 왼쪽으로 계산된다. 즉 2^3^2은 2^(3^2)로 계산되고, ##32는 #(#32)로 계산된다.
현석이의 계산기는 정수 연산밖에 하지 못한다. 제곱근이나 나눗셈 연산의 결과가 정수로 맞아떨어지지 않는 경우는 대신 0 방향으로 가장 가까운 정수를 결괏값으로 취한다. 예를 들어 #17의 결과는 4이고, (2-9)/3의 결과는 -2이다.
현석이는 잠깐 코딩을 해 보다가 차라리 손으로 계산하는 게 더 빠르겠다는 생각이 들었다. 코딩을 못하는 현석이를 위해 계산기를 만들어 주자!
계산해야 할 식이 주어진다. 식의 길이는 100을 넘지 않으며, 문제에 주어진 문법을 만족한다. 또한 다음과 같은 조건을 만족하는 수식만 입력으로 주어짐이 보장된다.
계산 결과를 출력한다.
#9+2*3+1=
10
#(7^2-34+5*2)^3/8+7*23=
176
(2*(3+6/2)+2)/4+3*(2*(3+6/2)+2)/4+3=
16
School > 서울과학고등학교 > SciOI 2018_01 D번