반응형
https://www.acmicpc.net/problem/1541
1541번: 잃어버린 괄호
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다
www.acmicpc.net
![](https://blog.kakaocdn.net/dn/XeHR9/btrMaHapBnj/sRPh0T9Iyf3jtqokUzDxSK/img.png)
풀이
이번 문제는 잘 이해한다면 쉽게 풀 수 있다고 생각한다.
55-50+40
어떻게 하면 최솟값을 만들 수 있을까? 최솟값을 만들려면 최대한 큰 값을 빼주면 된다. 즉, 덧셈을 먼저 진행한 후에 뺄셈을 진행하면 된다.
1. 공식에서 -로 분리한다.
String[] str = br.readLine().split("-");
2. 이후에 +를 분리해서 값을 더해준다.
for (int i=0; i<str.length; i++) {
int temp = 0;
// 뺄셈으로 나눈 토큰을 덧셈으로 분리해서 값을 더한다.
String[] subStr = str[i].split("\\+");
for (int j=0; j<subStr.length; j++) {
temp += Integer.parseInt(subStr[j]);
}
if (sum == Integer.MAX_VALUE) sum = temp;
else sum -= temp;
}
덧셈을 분리할 때 주의할 점이 한 가지 있다. split은 정규식을 받기 때문에 "+"를 해주면 regex.PatternSyntaxException을 발생시킨다. + 문자가 특별한 의미를 제공하고 있기 때문인데 이스케이프(\) 문자를 이용해서 특별한 의미를 없애고 문자 그 자체를 받아내면 된다. 하지만 백슬래쉬도 단독으로 사용할 수 없기 때문에 두 번을 사용해야 + 문자를 분리할 수 있다.
3. 분리를 완료했다면 마지막으로 첫 번째 값은 양수이기 때문에 먼저 sum에 넣은 후에 나머지 값들을 다 빼주면 된다.
<최종코드>
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] str = br.readLine().split("-");
int sum = Integer.MAX_VALUE;
for (int i=0; i<str.length; i++) {
int temp = 0;
// 뺄셈으로 나눈 토큰을 덧셈으로 분리해서 값을 더한다.
String[] subStr = str[i].split("\\+");
for (int j=0; j<subStr.length; j++) {
temp += Integer.parseInt(subStr[j]);
}
if (sum == Integer.MAX_VALUE) sum = temp;
else sum -= temp;
}
System.out.println(sum);
}
}
반응형
'알고리즘 > 구현 & 그리디 & 브루트포스' 카테고리의 다른 글
[백준]JAVA - 13305번: 주유소 (0) | 2022.09.16 |
---|---|
[백준]JAVA - 1931번: 회의실 배정 (0) | 2022.09.16 |
[백준]JAVA - 2309번: 일곱 난쟁이 (0) | 2022.09.13 |
[백준]JAVA - 10546번: 배부른 마라토너 (0) | 2022.09.08 |
[백준]JAVA - 10872번 팩토리얼 (0) | 2022.07.20 |