희렌버핏

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

Web/알고리즘

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

Oliviakim 2020. 11. 25. 15:15

문제

세준이는 양수와 +, -, 그리고 괄호를 가지고 길이가 최대 50인 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.

입력

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

출력

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

내 코드 (144ms)

- 큰 수를 뺄수록 최소값이 나온다.

- '-'를 기준으로 문자열을 분리한다.

- '+'가 있으면 덧셈을 해준다.

- 전체 요소들을 합쳐준다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws IOException {
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        StringTokenizer st = new StringTokenizer(br.readLine(), "-");
        
    	int size = st.countTokens();
        String[] strArray = new String[size];

        for(int i=0; i<size; i++) {
        	strArray[i] = st.nextToken();
        	
        	if(strArray[i].indexOf("+") != -1) {
            int ele = 0;
        	for(String num : strArray[i].split("\\+")) {
        		ele += Integer.parseInt(num);
        	}
        	strArray[i] = Integer.toString(ele);
        	}
        }
        
        int sum = Integer.parseInt(strArray[0]);
        for(int i=1; i<size; i++) {
    		sum -= Integer.parseInt(strArray[i]);
    	}
        
        System.out.println(sum);

	}

}

다른사람 코드 (128ms)

- StringTokenizer가 아닌 split을 썼다.

- '+'가 없어도 무조건 배열에 split 해서 저장했다.

- 기존 배열을 바꾸지 않고 새로운 배열을 만들어 저장했다. (새로운 배열이 int형이라 string으로 다시 바꿀 필요가 없어졌다.)

=> 형변환을 적게 해주는 것도 좋은 것 같다.

import java.lang.Math;
import java.io.*;
import java.util.*;
class Main {

    public static void main(String[ ] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        String s = br.readLine();
        
        String[] cal = s.split("-");
        
        int[] number = new int[cal.length];
        
        for(int i=0; i<cal.length; i++){
            if(cal[i].contains("+")){
                String[] temp = cal[i].split("\\+");
                for(int j=0; j<temp.length; j++){
                    number[i]+=Integer.parseInt(temp[j]);
                }
            }
            else{
                number[i] = Integer.parseInt(cal[i]);
            }
        }
        
        int sum = number[0];
        for(int i=1; i<number.length; i++){
            sum-=number[i];
        }
        
        System.out.println(sum);
    }
}

 

'Web > 알고리즘' 카테고리의 다른 글

[백준] 2217 로프 - JAVA  (0) 2020.11.29
[백준] 5585 거스름돈 - JAVA  (0) 2020.11.25
[백준] 11399 ATM - JAVA  (0) 2020.11.24
[백준] 1931 회의실 배정 - JAVA  (0) 2020.11.24
[백준] 11047 동전 - JAVA  (0) 2020.11.23