백준/파싱

1541 잃어버린 괄호

have a good time 2022. 6. 28. 16:44

 

 

1. 풀이

 

다른 사람 블로그를 참고했다.

 

예를 들어서 설명하겠다.

 

10 + 20 - 30 + 40 - 50 + 60

 

괄호를 쳐서 주어진 입력의 결과를 최소값으로 만들라고 했다.

핵심은 - 부호를 이용하는 것이다.

즉, 위의 예제에서는 10 + 20 - (30 + 40) - (50 + 60) 이 된다.

이처럼 - 부호 뒤에 ( 괄호를 치고

다음 - 부호가 나오기 전에 ) 괄호를 쳐주면 된다. 

즉, 음수값이 크게 만들면 된다.

 

 

 

단계 1

 

제일 먼저 입력값을 String 으로 받는다.

 

 

 

단계 2

 

 - 부호를 기준으로 입력값을 분리해준다.

 

 

 

단계 3

 

분리된 입력값을 각각 + 연산한다.

 

 

 

단계 4

 

맨 앞에 있는 값 제외하고 모두 - 연산하면 된다.

즉, 30 - 70 - 110 = -150 

이 정답이 된다.

 

 

2. 최종 코드

 

 

 

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

public class Main {
	
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String input = br.readLine();
		String a[] = input.split("-");
		
		int result = 0;
		boolean first = true;
		
		for(int i =0; i<a.length; i++) {
			
			String b[] = a[i].split("\\+");
			
			for(int j =0; j<b.length; j++) {
				
				int sum = 0;
				sum+=Integer.parseInt(b[j]);
	
			
			if(first) {
				result+=sum;
			}else {
				result-=sum;
			}
			
			}
			
			first  = false;
		}
		
		System.out.println(result);
	}
}

 

 

코드에 보면 split 으로 문자열을 배열값으로 바꿀 때

split("\\+") 

로 사용하고 있다.

 

+ 기호를 기준으로 나누려고 하는 것인데,

split("+") 이렇게만 하면 인식을 못한다고 한다.

그래서 앞에 \\ 를 넣어준다.

 

 

참고 블로그 :

https://st-lab.tistory.com/148