Friday, September 25, 2015

정보 올림피아드 2628, 정수 3개 계산기

문제

민성이는 정수3개의 사칙연산을 계산하는 계산기를 만들려고 한다.
계산기는 반드시 3개의 정수만을 계산한다. 사용되는 연산자는 “+, -, *, /, %”를 사용한다. 여기서 ‘/’는 몫을 구하고, ‘%’는 나머지를 구하는 연산자 이다.

입력형식

입력은 첫줄에 계산하고자 하는 연산식이 들어온다. 예, 3+4*5 입력되는 정수는 1000이하이다.

출력형식

출력은 첫줄에 입력으로 주어진 계산식을 계산하여 결과를 정수로 출력한다.

입력 예

3+4*5

출력 예

23

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import java.util.*;
public class Main {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        
        String str = sc.nextLine();
        
        char[] strArray = str.toCharArray();
        
        Queue[] queueArray = new Queue[3];
        for(int i = 0;i<3;i++){
         queueArray[i] = new LinkedList();
        }
        int stackArrayIdx = 0;
        
        char[] operatorArray = new char[2];
        int operatorArrayIdx = 0;
        
        boolean newOperandFlag = false;
        for(int i = 0; i < strArray.length;i++){
         if(strArray[i]=='+'||strArray[i]=='-'||strArray[i]=='*'||strArray[i]=='/'||strArray[i]=='%'){
          operatorArray[operatorArrayIdx] = strArray[i];
          operatorArrayIdx++;
          stackArrayIdx++;
         }else{
          queueArray[stackArrayIdx].add(strArray[i]);
         }
        }
        
        
        int[] operandArray = new int[3];
        for(int i = 0;i < 3;i++){
         String tempOperand = "";
         for(;;){
          if(queueArray[i].isEmpty()){
           break;
          }
          char c = (char)queueArray[i].poll();
          tempOperand += c;
         }
         operandArray[i] = Integer.parseInt(tempOperand);
        }
                
        int[] operatorPrecedence = new int[2];
        
        for(int i=0; i<2; i++){
         if(operatorArray[i] == '+'||operatorArray[i] == '-'){
          operatorPrecedence[i] = 1;
         }else{
          operatorPrecedence[i] = 2;
         }
        }

        
        int finalResult = 0;
        if(operatorPrecedence[0] < operatorPrecedence[1]){
         int result1 = calculator(operandArray[1], operatorArray[1], operandArray[2]);
         finalResult = calculator(operandArray[0], operatorArray[0], result1);         
         
        }else{
         int result1 = calculator(operandArray[0], operatorArray[0], operandArray[1]);
         finalResult = calculator(result1, operatorArray[1], operandArray[2]);
        }
        
        System.out.println(finalResult);

 }
 
 static int calculator(int operator1, char operand, int operator2){
  if(operand == '+'){
   return operator1 +  operator2;
  }else if(operand == '-'){
   return operator1 -  operator2;
  }else if(operand == '*'){
   return operator1 *  operator2;
  }else if(operand == '/'){
   return operator1 /  operator2;
  }else if(operand == '%'){
   return operator1 %  operator2;
  }
  return 0;
 }
 
}

No comments:

Post a Comment