Coding Test/BOJ
[백준] 1541번 : 잃어버린 괄호 (java)
Heang Lee
2021. 8. 17. 16:31
어떻게 생각하고 문제를 풀었는가?
+와 -만으로 이루어진 식에서 최소 값은 - 연산이 나온 이후의 값을 모두 -로 만들었을 때 구할 수 있습니다.
따라서 문자열의 첫 - 연산 위치를 확인하고, 문자열을 나눈 후 각 문자열의 숫자 값을 모두 합하여 첫 문자열로부터 도출한 값 - 나중 문자열로부터 도출한 값으로 문제를 해결할 수 있을 것이라고 생각하였습니다.
코드
import java.io.*;
import java.util.*;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String formula = reader.readLine();
reader.close();
String[] subformulas = formula.split("-", 2);
int result = calculate(subformulas[0]);
if(minusExisted(subformulas)){
result -= calculate(subformulas[1]);
}
System.out.println(result);
}
private static int calculate(String formula){
String[] values = formula.split("\\D");
return Arrays.stream(values).mapToInt(Integer::parseInt).sum();
}
private static boolean minusExisted(String[] subformulas){
return subformulas.length > 1;
}
}
String의 split과 정규 표현식을 사용하여 코드를 작성하였습니다.
첫 - 연산을 기점으로 두 개의 문자열을 나누기 위해 split("-", 2)를 호출하여 최대 2개의 문자열로만 나뉘어 질 수 있도록 하였고, 0~9가 아닌 문자열을 의미하는 정규 표현식 \D를 split의 인자로 사용하여 연산을 무시하고 숫자 값들만을 String배열에 저장할 수 있도록 하였습니다.
문제를 해결함에 있어 주의해야할 점은 - 연산이 없는 입력이 존재할 수 있다는 것입니다.
split함수의 결과가 문자열 하나로만 이루어진 배열이므로 배열의 크기가 1보다 크다면 (크기가 2라면) 뺄셈을 해주는 것으로 정상적인 결과를 얻을 수 있습니다.