알고리즘/백준
BOJ) 잃어버린 괄호
Zin0_0
2020. 7. 21. 15:07
반응형
잃어버린 괄호
1541번: 잃어버린 괄호
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다
www.acmicpc.net
풀이
양수와 +-로만 이루어졌고 최대 길이가 50인 수식이 있다.
이 수식에 적절하게 괄호를 씌워서 최소값을 구하는 문제다.
그렇다면, 가장 중요한 것은 -가 최대가 되게 해야한다.
-로 먼저 split을 해주고, - 뒤에 있는 모든 +를 더해서 -를 씌워주면 최소값이 나올 것이다.
이 때, -를 기준으로 split을 해줬기 때문에, 배열의 첫번째 index는 -가 없다는 점을 유의해야한다.
그래서 idx ==0인 경우에는 -를 씌워주지 않고 답을 구했다.
-로 split한 문자열을 다시 +로 split해서 각 숫자의 합을 더했다.
이 숫자들을 다 더해서 -를 씌워주면서 첫번째 인덱스의 값과 빼주면 답을 구할 수 있다.
코드
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));
solution(br.readLine());
br.close();
}
private static void solution(String arithmeticStr) {
String[] minusArr = arithmeticStr.split("\\-");
int answer =0;
for(int i=0; i<minusArr.length; i++) {
int partSum = getCalNum(minusArr[i]);
if(i ==0) { partSum *= -1;}
answer -= partSum;
}
System.out.println(answer);
}
private static int getCalNum(String str) {
String[] numArr = str.split("\\+");
int result =0;
for(String numStr : numArr) {
result += Integer.parseInt(numStr);
}
return result;
}
}
반응형