[알고리즘]/백준

자바 그리디 - 백준 1541 잃어버린 괄호

broship 2021. 2. 26. 11:12

문제


 

 

 

문제해결


import java.util.Scanner;

public class B1541 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String input = sc.next();
		String[] arr = input.split("-");
		// 1. 맨 앞의 +연산 처리 결과
		String[] tmp = arr[0].split("\\+");//+에는 \\를 붙여줘야 한다함
		int first = 0;
		for(int i=0;i<tmp.length;i++) {
			first += Integer.parseInt(tmp[i]);
		}
		// 2. 그 후의 모든 값 더하기
		int other = 0;
		for(int i=1;i<arr.length;i++) {
			String[] tmp2 = arr[i].split("\\+");
			for(int j=0;j<tmp2.length;j++) {
				other += Integer.parseInt(tmp2[j]);
			}
		}
		// 3. 맨 처음값 - 그 후의 모든 값 = 가장 작은 수
		System.out.println(first-other);
	}
}

 

- 주어진 문자열을 "+" 연산을 먼저 한 후 "-" 연산을 하면 값을 구할 수 있다

- 가장 첫번째 문자는 숫자기 때문에 제일 처음의 값은 + 이므로

1. 맨 처음 부터 첫번째 "-" 전까지 모든 숫자를 "+" 연산(first)

2. 첫번째 "-" 부터 나머지 모든 숫자를 "+" 연산(other)

3. 위 두 수를 빼면(first-other) 이 식의 최소값을 구할 수 있다

 

※ "+"는 특수한 기호라 split() 사용시 그냥 사용하면 에러를 발생시킴, 백슬레시 2개를 써줘 이스케이프 처리를 해줘야됨