V 14일차 - 심화 계산기 연습 이어서

박태은·2024년 6월 25일

V 웹개발자 프로젝트

목록 보기
15/59

package org.koreait;
import java.util.Arrays;
import java.util.stream.Collectors;
public class Calc {
public static int run(String exp) {
// 단일항이 들어오면 바로 리턴
if (!exp.contains(" ")) {
return Integer.parseInt(exp);
}
boolean needToGwal = exp.contains("(") && exp.contains(")");
boolean needToMulti = exp.contains(" * ");
boolean needToPlus = exp.contains(" + ") || exp.contains(" - ");

    boolean needToCompound = needToMulti && needToPlus;


    if (needToGwal) {           // 소괄호()가 있을 떄
        exp = exp.replaceAll("\\(", "").replaceAll("\\)", "");
    }

    if (needToCompound) {           // 곱하기와 더하기가 같이있는 복합 식일때
        String[] bits = exp.split(" \\+ ");
        String newExp = Arrays.stream(bits)
                .mapToInt(Calc::run)
                .mapToObj(e -> e + "")
                .collect(Collectors.joining(" + "));
        return run(newExp);
    }
    if (needToPlus) {               // 더하기만 있는 식일때
        exp = exp.replaceAll("- ", "+ -");
        String[] bits = exp.split(" \\+ ");
        int sum = 0;
        for (int i = 0; i < bits.length; i++) {
            sum += Integer.parseInt(bits[i]);
        }
        return sum;
    } else if (needToMulti) {
        String[] bits = exp.split(" \\* ");
        int sum = 1;
        for (int i = 0; i < bits.length; i++) {
            sum *= Integer.parseInt(bits[i]);
        }
        return sum;
    }
    throw new RuntimeException("해석 불가 : 올바른 계산식이 아니야");
}

}

마지막 테스트 케이스를 제외하고는 다 실행이 잘 된다. 나머지는 보완해야 될 뿐...

profile
취업준비생. 웹개발자를 목표로.

0개의 댓글