[프로그래머스/Java] Lv.0 문자열 계산하기

febCho·2024년 5월 6일
0

코딩테스트

목록 보기
188/253
post-thumbnail

문제

my_string은 "3 + 5"처럼 문자열로 된 수식입니다. 문자열 my_string이 매개변수로 주어질 때, 수식을 계산한 값을 return 하는 solution 함수를 완성해주세요.

- 제한사항

  • 연산자는 +, -만 존재합니다.
  • 문자열의 시작과 끝에는 공백이 없습니다.
  • 0으로 시작하는 숫자는 주어지지 않습니다.
  • 잘못된 수식은 주어지지 않습니다.
  • 5 ≤ my_string의 길이 ≤ 100
  • my_string을 계산한 결과값은 1 이상 100,000 이하입니다.
  • my_string의 중간 계산 값은 -100,000 이상 100,000 이하입니다.
  • 계산에 사용하는 숫자는 1 이상 20,000 이하인 자연수입니다.
  • my_string에는 연산자가 적어도 하나 포함되어 있습니다.
  • return type 은 정수형입니다.
  • my_string의 숫자와 연산자는 공백 하나로 구분되어 있습니다.

풀이

- 오답

코드 실행했을 때 예제는 통과했는데, 채점을 맡기니 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;
    }
}

결과

profile
Done is better than perfect.

0개의 댓글