와챠의 우당탕탕 코딩 일기장

[백준]그리디 알고리즘/잃어버린 괄호/1541 풀이 JAVA 본문

코딩 일기장/백준

[백준]그리디 알고리즘/잃어버린 괄호/1541 풀이 JAVA

minWachya 2021. 2. 15. 16:24
반응형

문제

세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.

그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.

괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.

 

입력

첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다.

그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다.

수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다.

 

출력

첫째 줄에 정답을 출력한다.

 

 

풀이(JAVA)

import java.io.*;
import java.util.StringTokenizer;
/*
ex) 50+30-10+30+40-30+10을 최솟값으로 만들기 = 50+30-(10+30+40)-(30+10)
(- 뒤에 오는 숫자들을 괄호로 묶기)
1단계 : - 기준으로 나누기
50+30 / 10+30+40 / 30+10
2단계 : +기준으로 나누고 더하기
80 / 80 / 40
3단계 : 빼기(이때, 맨 첫 번째 숫자는 빼지 말고 더해야 함.)
80 - 80 - 30 = -40
*/
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 식 입력
// 1단계 : -기준으로 나누기
StringTokenizer st1 = new StringTokenizer(br.readLine(), "-");
// 2단계 : + 기준으로 나누고 더하기(맨 첫 번째 숫자는 더하기)
StringTokenizer st2 = new StringTokenizer(st1.nextToken(), "+");
int sum = 0;
while (st2.hasMoreTokens())
sum += Integer.parseInt(st2.nextToken());
// 2단계 : + 기준으로 나누고 더하기
while(st1.hasMoreTokens()) {
st2 = new StringTokenizer(st1.nextToken(), "+");
// 3단계 : 빼기
while (st2.hasMoreTokens())
sum -= Integer.parseInt(st2.nextToken());
}
// 출력
System.out.println(sum);
}
}
view raw Main.java hosted with ❤ by GitHub

반응형
Comments