[백준] 잃어버린 괄호 1541번
나의 풀이
public class LostBracket {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] items = br.readLine().split("\\-");
int result = 0;
result += Arrays.stream(items[0].split("\\+")).mapToInt(i -> Integer.parseInt(i)).sum();
for(int i = 1; i < items.length; i++) {
result -= Arrays.stream(items[i].split("\\+")).mapToInt(j -> Integer.parseInt(j)).sum();
}
System.out.println(result);
}
}
- 쉬워 보였는데 은근 머리 꽁꽁 싸매고 풀었다.
- -를 기준으로 입력 값을 나눠준다.
- -로 나눴을 때 맨 처음 값은 일반적인 숫자 하나의 값과 +로 이루어진 식 이렇게 두 가지가 올 수 있다.
- 그렇기 때문에 리스트의 첫 번째 값을 +로 나눠주고 int형으로 바꾼 다음에 합을 result 에 더해준다. 이렇게 하면 +로 이루어진 식이라면 더해진 값이 될테고, 아니라면 그냥 숫자 하나의 값이 result에 더해질 것이다.
- 만약 뒤에 식이 더 있다면 for문을 탈 것이다. for문 부터의 식은 -로 잘려진 식이나 값이기 때문에 마찬가지로 +로 나눠서 합을 구하고 result에서 빼주면 된다.
느낀점
- split을 -나 + 같은 문자로 나누려고 하면 Dangling metacharacter 에러가 발생한다. 그렇기 때문에 앞에 \ 를 붙여줘야 한다.