본문 바로가기
Problem Solving/Baekjoon

[백준] 1541 잃어버린 괄호 - Greedy / Java

by graycode 2022. 6. 9.

 문제 링크

 

1541번: 잃어버린 괄호

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

www.acmicpc.net

 

 풀이 과정

덧셈과 뺄셈이 혼재되어 있는 식에서 문제에 제시되어 있는 조건 상 최소 값을 구해내기 위해선

덧셈으로 이루어진 식을 괄호를 쳐서 먼저 계산한 후 뺄셈을 계산해야한다.

 

우선 전체식을 "-" 를 기준으로 분리하고 각각의 분리된 식에 포함된 수를 모두 더하는데

분리된 식을 문자열 파싱할 때 "+" 는 메타문자이므로 "\\+" 을 기준으로 파싱하며,

이때 생성된 모든 수를 더한 값을 result 변수에 뺄셈한다.

 

이때 result 변수가 초기값인지 여부를 확인 후 "-" 로 파싱한 첫번째 토큰 값으로 갱신하고

나머지 값들이 존재 시 result 변수에 뺄셈한다.

 

• 풀이 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

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

		int result = Integer.MAX_VALUE;
		for (int i = 0; i < input.length; i++) {
			String[] part = input[i].split("\\+");

			int sum = 0;
			for (int j = 0; j < part.length; j++)
				sum += Integer.parseInt(part[j]);

			if (result == Integer.MAX_VALUE)
				result = sum;
			else
				result -= sum;
		}

		bw.write(result + "\n");
		bw.flush();
	}

}

댓글