https://www.acmicpc.net/problem/1541
- 세준이는 양수와, +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
- 그리고 나서 세준이는 괄홀르 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
- 괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성
문제 풀이
[백준] 1541번 : 잃어버린 괄호 - JAVA [자바] (tistory.com)
- 최솟값을 만들기 위해서는 최대한 '큰 수'를 빼주어야 한다. 즉 덧셈(+)으로 이루어진 부분을 먼저 계산한 뒤 빼주는 것
1. 뺄셈(-)을 기준으로 1차적으로 문자열을 분리
2. 분리된 문자열들 각각에 포함 된 정수 값들을 모두 더 해준다.
3. 각각 더해진 값들을 뺄셈해준다.
- 뺄셈기호(-)를 중심으로 먼저 문자열을 분리해준 뒤, 각 분리된 문자열 안에 있는 정수끼리 더해준다.
- 그 다음 분리된 문자열들을 뺄셈을 해주면 되는 것이다.
- 이때 주의해야 할 점은 '첫 번째 수는 양수'라는 점이다.
정답
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args)throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int sum = Integer.MAX_VALUE;
StringTokenizer subtraction = new StringTokenizer(br.readLine(),"-");
while(subtraction.hasMoreTokens())
{
int temp = 0;
//뺄셈으로 나뉜 토큰을 덧셈으로 분리하여 해당 토큰을 더한다.
StringTokenizer addition = new StringTokenizer(subtraction.nextToken(),"+");
//덧셈으로 나뉜 토큰들을 모두 더한다.
while(addition.hasMoreTokens())
{
temp+=Integer.parseInt(addition.nextToken());
}
//첫 번째 토큰인 경우 temp값이 첫 번째 수가 됨
if(sum == Integer.MAX_VALUE)
{
sum = temp;
}
else
{
sum-=temp;
}
}
bw.write(sum+"");
bw.flush();
bw.close();
}
}
'Java > 백준' 카테고리의 다른 글
[JAVA] 백준 2630 색종이 만들기 (0) | 2024.03.06 |
---|---|
[JAVA] 백준 13305 주유소 (1) | 2024.03.04 |
[JAVA] 백준 11399 ATM (0) | 2024.03.04 |
[JAVA] 백준 1931 회의실 배정 (1) | 2024.03.04 |
[JAVA] 백준 11047 동전 0 (0) | 2024.03.03 |