와챠의 우당탕탕 코딩 일기장
[백준]그리디 알고리즘/잃어버린 괄호/1541 풀이 JAVA 본문
반응형
문제
세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
입력
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다.
그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다.
수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다.
출력
첫째 줄에 정답을 출력한다.
풀이(JAVA)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
} |

반응형
'코딩 일기장 > 백준' 카테고리의 다른 글
[백준]정수론 및 조합론/배수와 약수/5086 풀이 JAVA (0) | 2021.02.16 |
---|---|
[백준]그리디 알고리즘/주유소/13305 풀이 JAVA (0) | 2021.02.15 |
[백준]그리디 알고리즘/ATM/11399 풀이 JAVA (0) | 2021.02.14 |
[백준]그리디 알고리즘/회의실 배정/1931 풀이 JAVA (0) | 2021.02.14 |
[백준]그리디 알고리즘/동전0/11047 풀이 JAVA (0) | 2021.02.13 |