my_string은 "3 + 5"처럼 문자열로 된 수식입니다. 문자열 my_string이 매개변수로 주어질 때, 수식을 계산한 값을 return 하는 solution 함수를 완성해주세요.
코드 실행했을 때 예제는 통과했는데, 채점을 맡기니 2개의 케이스를 제외하고는 전부 실패했다. 그제서야 눈에 들어온 제한사항!
- 5 ≤ my_string의 길이 ≤ 100
- my_string에는 연산자가 적어도 하나 포함되어 있습니다.
아래 오답처럼 my_stringArr[1]만이 연산자일 것이라고 잡고 계산하면 안 되는구나 알게 됐다ㅜ 수정~
class Solution {
public int solution(String my_string) {
int answer = 0;
String[] my_stringArr = my_string.split(" ");
if(my_stringArr[1].equals("+")){
answer = Integer.parseInt(my_stringArr[0]) + Integer.parseInt(my_stringArr[2]);
}else if(my_stringArr[1].equals("-")){
answer = Integer.parseInt(my_stringArr[0]) - Integer.parseInt(my_stringArr[2]);
}
return answer;
}
}
먼저 공백을 구분자로 하여 숫자 부분과 연산자 부분을 구별해 배열로 담는다. 그 다음, 0번 인덱스에 담긴 숫자를 Integer 타입으로 파싱하여 변수 result에 대입해 준다.
그 다음 for문에서 초기값을 1로 세팅해 2씩 증가하며 연산자만을 추출할 수 있게끔 한다. 처음에는 짝수 인덱스에 있는 숫자값과 홀수 인덱스에 있는 연산자값을 구별하기 위해 이중for문을 사용했는데, 복잡할 뿐더러 또 에러가 났다;;
단순화하는 과정에서 발견한 더 좋은 방법 !!
앞서 말한 것처럼 i가 연산자가 되니, i+1은 숫자가 된다. 이에 따라 for문 안에서 숫자와 연산자를 각각의 변수에 대입한 뒤, equals()로 연산자가 +인지 -인지에 따라 if문으로 분기하여 값을 누적 계산해 준 뒤 반환하면 된다.
class Solution {
public int solution(String my_string) {
String[] my_stringArr = my_string.split(" ");
int result = Integer.parseInt(my_stringArr[0]);
for(int i = 1; i < my_stringArr.length; i += 2) {
String operator = my_stringArr[i];
int operand = Integer.parseInt(my_stringArr[i + 1]);
if(operator.equals("+")) {
result += operand;
}else if(operator.equals("-")) {
result -= operand;
}
}
return result;
}
}
