Leetcode Java Basic Calculator II
업데이트:
문제
코드
class Solution {
public int calculate(String s) {
int sum = 0;
int pre = 0;
char sign = '+';
for (int idx = 0; idx < s.length(); idx++) {
char c = s.charAt(idx);
if (c == ' ') {
continue;
} else if (Character.isDigit(c)) {
int num = c - '0';
while (idx < s.length() - 1 && Character.isDigit(s.charAt(idx + 1))) {
num = num * 10 + (s.charAt(idx + 1) - '0');
idx++;
}
switch (sign) {
case '+':
sum += pre;
pre = num;
break;
case '-':
sum += pre;
pre = -num;
break;
case '*':
pre *= num;
break;
case '/':
pre /= num;
break;
}
} else {
sign = c;
}
}
return sum + pre;
}
}
결과
설명
-
지난 번 Basic Calculator와 비슷한 문제로, 사칙연산을 이용한 수학 공식이 담긴 문자열 s를 계산하는 문제이다.
- 문제 풀이에 필요한 변수를 정의한다.
- sum은 사칙 연산의 결과를 저장하기 위한 변수로, 0으로 초기화 시킨다.
- pre는 사칙 연산을 수행할 때 사용되는 두 숫자열 중 앞의 숫자열을 넣어 저장할 변수로, 0으로 초기화 시킨다.
- sign은 사칙 연산에 사용되는 기호를 넣어 저장하는 변수로, ‘+’로 초기화 시킨다.
-
문자열 s의 길이만큼 반복하여 계산을 수행한다.
-
s의 idx번째 문자가 ‘ ‘(공백)일 경우, 반복을 계속 수행한다.
- s의 idx번째 문자가 숫자열인 경우, 아래의 계산을 수행한다.
- num에 s의 idx번째 문자를 ‘0’을 뺀 숫자로 변환한 값을 넣어준다.
- s의 idx번째 문자 이후가 숫자인 경우 반복하여 num에 10을 곱하고, $idx + 1$번째 문자를 ‘0’을 뺀 숫자로 변환하여 더한 후 idx를 증가시킨다.
- 반복이 완료되면 sign에 따라 값을 넣어준다.
- ’+’인 경우, sum에 pre를 더해주고, pre에 num을 넣어준다.
- ’-‘인 경우, sum에 pre를 더해주고, pre에 -num을 넣어준다.
- ‘*‘인 경우, pre에 num을 곱해준다.
- ’/’인 경우, pre에 num을 나눠준다.
-
그 외인 경우 사칙연산 기호이기 때문에, sing에 s의 idx번째 문자를 넣어준다.
- 모든 반복이 완료되면 계산된 결과와 중간 값을 저장한 sum과 pre의 합을 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기