[Baekjoon 1541번] 잃어버린 괄호 문제 (with 자바)

반응형
728x90
반응형

문제

https://www.acmicpc.net/problem/1541

 

1541번: 잃어버린 괄호

첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다

www.acmicpc.net

 

 

풀이코드

import java.util.Arrays;
import java.util.Scanner;

/**
 * @Date 2022/05/29
 * @URL https://www.acmicpc.net/problem/1541
 */
public class A1541_잃어버린_괄호 {
    static String param;

    public static void main(String[] args) {
        // write your code here
        A1541_잃어버린_괄호 main = new A1541_잃어버린_괄호();
        main.solution();
    }

    public void solution() {
        input();

        // 덧셈을 먼저하고 마지막에 뺄셈을 수행하면 될듯하다.
        // 55-50+40-60 의 경우
        // 55, 50+40
        String[] minusArr = param.split("-");
        int sum = 0;

        boolean isFirst = true;
        for (String s : minusArr) {
            String[] plusArr = s.split("\\+");

            if (isFirst) {
                sum = Arrays.stream(plusArr).mapToInt(Integer::parseInt).sum();
                isFirst = false;
            } else {
                sum -= Arrays.stream(plusArr).mapToInt(Integer::parseInt).sum();
            }
        }

        System.out.println(sum);
    }

    private void input() {
        Scanner sc = new Scanner(System.in);
        param = sc.next();
    }
}
CASE1. 55-50+40의 경우

 

1) "-"를 기준으로 배열로 생성

String[] minusArr = param.split("-");

55, 50+40

 

2) minusArr을 순회하여 각 + 기준으로 덧셈을 구한다.

for (String s : minusArr) {
    String[] plusArr = s.split("\\+");

    if (isFirst) {
        sum = Arrays.stream(plusArr).mapToInt(Integer::parseInt).sum();
        isFirst = false;
    } else {
        sum -= Arrays.stream(plusArr).mapToInt(Integer::parseInt).sum();
    }
}

처음일 경우에만 sum에 값을 더하고, 그 이후로는 스트림으로 구한 sum() 결과값을 sum 변수에서 빼면 된다.

 

 

반응형

Designed by JB FACTORY