본문 바로가기

Java/백준

[JAVA] 백준 1541 잃어버린 괄호

https://www.acmicpc.net/problem/1541

 

1541번: 잃어버린 괄호

첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다

www.acmicpc.net

 

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

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

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

 

문제 풀이 

 

[백준] 1541번 : 잃어버린 괄호 - JAVA [자바] (tistory.com)

 

[백준] 1541번 : 잃어버린 괄호 - JAVA [자바]

www.acmicpc.net/problem/1541 1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개

st-lab.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