[BOJ 1541] 잃어버린 괄호
업데이트:
문제
- BOJ 1541
- 문제의 저작권은 Baekjoon Online Judge에 있습니다.
접근방식
그리디라기 보다는 문자열함수를 잘 적용할 수 있는지 묻는 문제인것 같다.
split()
함수를 사용하면 된다.
예를 들어, 55+50-40+30-10의 최소값을 구하기 위해서는 합을 먼저 구하고, 그 결과값을 모조리 빼주면 된다.
즉, 55+50
-40+30
-10
로 묶어서 계산해주면 된다.
구현한 순서는 다음과 같다.
- 문자열을 입력 받아서 ‘-‘를 구분자로 문자열 배열
str
을 만든다. - 만들어진 배열을 for문으로 돌면서 +를 구분자로 새로운 문자열 배열
addNums
을 만든다.
- 특수문자를 구분자로 사용하여 토큰화해주기 위해선 앞에 ‘\‘을 붙여주도록 하자.
=>split("\\+")
- 처음 나오는 숫자는 무조건 더해줘야 하므로
i==0
일 때,Ans
에 더해주고, 이외의 경우에는Ans
에서 빼준다.
import java.util.Scanner;
//잃어버린 괄호
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
String[] str = s.split("-");
int Ans = 0;
//각 숫자 더하기
for(int i=0; i<str.length; i++) {
String ss = str[i];
int sum = 0;
String[] addNums = ss.split("\\+");
for(int j=0; j<addNums.length; j++) sum += Integer.parseInt(addNums[j]);
if(i==0) Ans = sum;
else Ans-=sum;
}
System.out.println(Ans);
}
}