Skip to main content

49. [Java] 간단한 식 계산하기

https://school.programmers.co.kr/learn/courses/30/lessons/181866

  • 문자열 binomial이 매개변수로 주어진다.
  • binomial은 "a op b" 형태의 이항식이고
  • a와 b는 음이 아닌 정수, op는 '+', '-', '*' 중 하나이다.
  • 주어진 식을 계산한 정수를 return

  • 0 ≤ a, b ≤ 40,000
    • 0을 제외하고 a, b는 0으로 시작하지 않는다.

정답코드

class Solution {
    public int solution(String binomial) {
        // binomial 을 op로 나눈다
        // op를 switch-case구문으로 분기해서 각 각 리턴
        // 계산기 생각하면 됨   
        
        // 정규식으로 숫자만 분리
        String[] splited = binomial.split("[+\\-*]");
        int num1 = Integer.parseInt(splited[0].trim());
        int num2 = Integer.parseInt(splited[1].trim());
        
        // 연산자 추출
        char op = ' ';
        for (char c : binomial.toCharArray()) {
            if (c == '+' || c == '-' || c == '*') {
                op = c;
                break;
            }
        }
        
        // op에 따라 계산 분기
        switch (op) {
            case '+':
                return num1 + num2;
            case '-':
                return num1 - num2;
            case '*':
                return num1 * num2;
            default:
                throw new IllegalArgumentException("지원하지 않는 연산자: " + op);
        }
    }
}
  1. 입력된 문자열을 +, -, * 기호 기준으로 쪼개서 숫자만 뽑아낸다.
  2. 쪼갠 숫자 두 개를 각각 정수로 변환한다.
  3. 문자열을 한 글자씩 보면서 첫 번째 나온 연산자를 찾아낸다.
  4. 찾은 연산자에 따라 덧셈, 뺄셈, 곱셈 중 맞는 계산을 해서 결과를 반환한다.

오답

제목은 간단한 식 계산하기인데 정규이랑 조건문에서 에러가 너무 많이 나서 별도로 정리했다.

  1. char 타입 초기화 관련
    https://dainwiki.com/books/whyswiki/page/java-char
  2. swtich-case문 return할 때 break 사용 여부
    https://dainwiki.com/books/whyswiki/page/java-switch-case-return
  3. [Java] 정규식 - 부호는 범위지정자
    https://dainwiki.com/books/whyswiki/page/java-L2G/revisions

참고로 코드 연습할 때는 dark모드가 눈이 편한데, 화면 스크린샷이나 에러 메세지 읽을 때는 라이트모드가 편하다.
왜냐하면 콘솔은 어두운 네이비인데 글씨가 어두운 빨간색이라 잘 안보인다. 그래서 라이트모드로 스크린샷해서 정리했다.


프로그래머스에서 좋아요 많이 받은 코드 (김준태, 윤명식 외)

class Solution {

    public int solution(String binomial) {
        String[] cal = binomial.split(" ");

        if (cal[1].equals("+")) {
            return (Integer.parseInt(cal[0])) + (Integer.parseInt(cal[2]));
        } else if (cal[1].equals("-")) {
            return (Integer.parseInt(cal[0])) - (Integer.parseInt(cal[2]));
        } else {
            return (Integer.parseInt(cal[0])) * (Integer.parseInt(cal[2]));
        }
    }
}

정규식 안 써도 공백 기준으로 분리하면 3개로 나눠지는구나...