delpho
[실버 2, 부호 다루기] 백준 1541 - 잃어버린 괄호 (자바) 본문
Think
- 괄호를 활용해서 최솟값을 만들 수 있는 방법은, - 값을 최대로 만들도록 해야한다.
- 예를들어, 20+30-10+50-70 라면, 20+30-(10+50)-(70) 와 같이 만들어주어야 한다.
- 그래서 처음 구현 아이디어는, 해당 식에 직접 괄호 문자를 추가한 후, 하나씩 파싱하며 값을 계산했는데 구현이 넘 복잡해지고 틀리기도 했다.
- 구글링을 통해 풀이를 살펴보니, StringTokenizer나 String.split()을 통해 - 부호를 기준으로 문자열들을 나눈 후, 각각 문자열을 + 부호로 또 나눠서 더해준 뒤 값을 계산한다.
- 나뉜 문자열의 처음 값은 + 값이기 때문에 이 값을 처리해야하는데, sum 변수를 Integer.MAX_VALUE로 초기화 후 if문을 통해 저장한다.
- sum = 0으로 하면, 값을 빼주는 과정에서 sum값이 또 0이 될 수 있기에 문제가 있음
제출 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
//https://st-lab.tistory.com/148
public class test {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StringTokenizer st;
public static void main(String[] args) throws IOException {
init();
process();
}
private static void process() {
int sum = Integer.MAX_VALUE;
while(st.hasMoreTokens()){
int temp = 0;
StringTokenizer st2 = new StringTokenizer(st.nextToken(), "+");
while(st2.hasMoreTokens()){
temp += Integer.parseInt(st2.nextToken());
}
if(sum == Integer.MAX_VALUE){
sum = temp;
}else{
sum -= temp;
}
}
System.out.println(sum);
}
public static void init() throws IOException {
st = new StringTokenizer(br.readLine(), "-");
}
}