-
1541 잃어버린 괄호백준/파싱 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