Vienna
백준5613번) 계산기 프로그램 본문
https://www.acmicpc.net/problem/5613
5613번: 계산기 프로그램
입력의 각 줄에는 숫자와 +, -, *, /, =중 하나가 교대로 주어진다. 첫 번째 줄은 수이다. 연산자의 우선 순위는 생각하지 않으며, 입력 순서대로 계산을 하고, =가 주어지면, 그때까지의 결과를 출
www.acmicpc.net
◇ 문제
덧셈, 뺄셈, 곱셈, 나눗셈을 할 수 있는 계산기 프로그램을 만드시오.
◇ 입력
입력의 각 줄에는 숫자와 +, -, *, /, =중 하나가 교대로 주어진다. 첫 번째 줄은 수이다. 연산자의 우선 순위는 생각하지 않으며, 입력 순서대로 계산을 하고, =가 주어지면, 그때까지의 결과를 출력한다. 주어지는 수는 108 이하의 양의 정수이다. 계산 중 결과는 0 또는 음수가 될 수 있지만, -108 ~ 108 범위를 넘지는 않는다. 또, 나눗셈에서 소수점은 버린다. 따라서, 100/3*3 = 99이다.
피제수가 음수일 때 나눗셈을 하는 경우는 입력으로 주어지지 않는다.
◇ 출력
첫째 줄에 계산 결과를 출력한다.
◆ 풀이
연산자 우선순위를 미리 고려하지 않아도 되는 문제다.
전체 String이 먼저 주어지는 것도 아니기 때문에 정규표현식 등으로 split이 필요하지 않다.
그때그때 연산자를 받고, 기존의 결과와 피연산자를 계산하면 될 것으로 예상된다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
private static int _result;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
_result = Integer.parseInt(br.readLine());
while(true){
String operator = br.readLine();
if(isEnd(operator))
break;
cal(operator, Integer.parseInt(br.readLine()));
}
System.out.println(_result);
}
private static boolean isEnd(String oper){
return "=".equals(oper);
}
private static void cal(String oper, int value){
switch (oper){
case "+":
add(value);
break;
case "-":
sub(value);
break;
case "*":
mul(value);
break;
case "/":
div(value);
break;
}
}
private static void add(int val){
_result +=val;
}
private static void sub(int val){
_result -=val;
}
private static void mul(int val){
_result *=val;
}
private static void div(int val){
_result /=val;
}
}
본래는 연산자 데이터를 미리 static으로 선언하고 코드 풀이를 할까, 싶었는데 결국 switch문을 도는 것은 크게 다를바 없어보여 그냥 다이렉트로 switch문을 돌기로 했다.
'알고리즘 문제 풀이' 카테고리의 다른 글
백준11725번) 트리의 부모 찾기 (0) | 2023.05.24 |
---|---|
프로그래머스) 문자열안에 문자열 (0) | 2023.05.24 |
프로그래머스) 배열 회전시키기 (0) | 2023.05.24 |
프로그래머스) 한 번만 등장한 문자 (0) | 2023.05.24 |
백준10807번) 개수 세기 (1) | 2023.05.16 |
Comments