본문 바로가기
Algorithm/백준

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

by 코딩로그 2023. 1. 11.

오늘의 문제는 문자열을 파싱 하는 게 가장 중요한 포인트인 문제입니다.

 

 

문제 해결 방안

1. "-"를 기준으로 문자열을 파싱 하기

2. 각 분리된 문자 안에 있는 숫자를 전부 더해준 다음 뺄샘 해주기

 

 

다음과 같은 예시로 설명드리겠습니다.

10 - 50 + 30 + 20 - 10 + 100

 

이 문제에서 요구하는 최소를 구하기 위해서는 뺄샘을 기준으로 덧셈을 통해 큰 수를 먼저 만든 다음  뺄샘을 연산하면 최소를 구할 수 있습니다.

 

10 - (50 + 30 + 20) - (10 + 100) = 10 - 100 - 110 = -200

 

 

이렇게 뺄샘을 기준으로 덧셈 연산을 위해 저는 split 메서드를 사용하였습니다. split("\\-")을 기준으로 분리된 문자열은 다음과 같습니다.

 

 10          50+30+20          10+100

 

 

다음은 각 분리된 문자 안에 있는 숫자를 전부 더해준 다음 뺄샘 해줘야 합니다.

이때, 주의할 점은 첫 번째 숫자는 빼면 안 됩니다!!! 첫 번째 숫자는 양수로 계산합니다.

 

result = 10;

 

50+30+20에 대해서 "+" 기준으로 split하면 [50, 30,  20]이 나옵니다.

그러면 이에 대해서는 50+30+20을 수행하고, result - 더한 값을 연산하면 됩니다. 

 

public class Main_1541 {

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

		String[] nums = str.split("\\-");//뺄샘 기준으로 분리
		int result = 0;

		//첫번째 숫자는 양수
		String[] plus = nums[0].split("\\+");
		
		for (int i = 0; i < plus.length; i++) {
			result += Integer.parseInt(plus[i]);
		}
		
		//다음 숫자부터는 빼주기
		for (int i = 1; i < nums.length; i++) {
			String[] tmp = nums[i].split("\\+");
			int sum = 0;
			for (int j = 0; j < tmp.length; j++) {
				sum += Integer.parseInt(tmp[j]);
			}
			result -= sum;
		}
		
		System.out.println(result);
	}
}