새소식

알고리즘/문제

[BOJ/백준 - 1541] 잃어버린 괄호

  • -

문제 출처: https://www.acmicpc.net/problem/1541

 

1541번: 잃어버린 괄호

첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다

www.acmicpc.net


public class BOJ_1541 {
public static void main(String[] args) throws Exception{
// INPUT & INIT
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
StringBuilder sb = new StringBuilder();
int answer = 0;
ArrayList<Integer> num = new ArrayList<>();
ArrayList<Integer> op = new ArrayList<>();
for(int i=0; i<str.length(); i++) {
char c = str.charAt(i);
if(c=='+') {
op.add(1);
num.add(Integer.parseInt(sb.toString()));
sb.setLength(0);
}else if(c=='-') {
op.add(-1);
num.add(Integer.parseInt(sb.toString()));
sb.setLength(0);
}else {
sb.append(c);
}
}
num.add(Integer.parseInt(sb.toString())); // 마지막 숫자
// CALCULATE
boolean hasMinus = false;
for(int i=0; i<num.size(); i++) {
if(i==0) {
answer += num.get(i);
continue;
}
if(op.get(i-1) == -1) {
answer -= num.get(i);
hasMinus = true;
}else {
if(hasMinus) {
answer -= num.get(i);
}else {
answer += num.get(i);
}
}
}
// OUTPUT
System.out.println(answer);
}
}
view raw BOJ_1541.java hosted with ❤ by GitHub

 

풀이의 아이디어는

빼기 연산자가 보이는 순간부터 뒤에 숫자는 연산자와 상관없이 무조건 다 빼버린다

 

이건 괄호가 어떻게 쳐지는 것이 관심이 있는게 아니다

빼기 연산자가 나오는 순간 그 뒤에 양수들을 묶어서 가장 작은 최소값을 만들 수 있기 때문이다

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.