[백준] 잃어버린 괄호(1541)

Wonho Kim·2025년 3월 18일

Baekjoon

목록 보기
37/42

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

그리디 관점으로 생각해보면 쉽게 풀리는 문제이다. 최솟값을 만들기 위해 "-"를 기준으로 문자열을 구분한 다음 가장 첫번째에 등장하는 수만 더하고, 이후에는 모두 빼주면 된다.

예제 입력을 기준으로 설명하면 다음과 같다.
(55) - (50 + 40) = -35

자바에서는 문자열을 구분하기 위해 split()StringTokenizer 클래스가 있다.

여기서는 split 메서드를 사용하여 아래와 같이 구분하도록 하겠다.

String input = br.readLine();
String[] str = input.split("-");

"-"를 기준으로 나눠진 str에 대해 내부에 있는 덧셈 연산을 모두 진행한 후 아래와 같이 가장 첫번째 등장하는 수는 더하고, 이후에는 모두 빼주면 된다.

int answer = 0;
for (int i = 0; i < str.length; i++) {
	int temp = mySum(str[i]);

	if (i == 0)
    	answer += temp;
	else
    	answer -= temp;
}

따라서 전체 소스코드는 다음과 같다.

import java.io.*;

public class P_1541 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String input = br.readLine();
        String[] str = input.split("-");

        int answer = 0;
        for (int i = 0; i < str.length; i++) {
            int temp = mySum(str[i]);

            if (i == 0)
                answer += temp;
            else
                answer -= temp;
        }

        System.out.println(answer);
    }

    static int mySum(String str) {
        int sum = 0;
        String[] temp = str.split("\\+");
        for (int i = 0; i < temp.length; i++) {
            sum += Integer.parseInt(temp[i]);
        }
        return sum;
    }
}
profile
새싹 백엔드 개발자

0개의 댓글