알고리즘 문제풀이/자바

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

Ella_K 2022. 11. 19. 10:03

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

 

1541번: 잃어버린 괄호

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

www.acmicpc.net

 

👉 풀이

  • 최솟값을 만들기 위해서는 큰수를 빼주어야한다 => 덧셈으로 이루어진 부분을 먼저 계산한뒤 덧셈결과를 빼준다.
  • 뺄셈이 덧셈보다 뒤에 있는 경우 먼저하고 더하나 더하고 빼나 똑같음
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

// https://www.acmicpc.net/problem/1541
// 최솟값을 만들기 위해서는 큰수를 빼주어야한다 => 덧셈으로 이루어진 부분을 먼저 계산한뒤 덧셈결과를 빼준다.
// (뺄셈이 덧셈보다 뒤에 있는 경우 먼저하고 더하나 더하고 빼나 똑같음)
public class p1541 {

    public int solution(String str){
        int sum = Integer.MAX_VALUE;
        String[] tokenArrByMinus = str.split("-");
        for(String token : tokenArrByMinus){
            String[] tokenArrByPlus = token.split("\\+"); // + 문자가 메타문자(meta character), \ 단독으로 사용할 수  없음
            int temp = 0;
            for(String t: tokenArrByPlus){
                temp += Integer.parseInt(t);
            }

            if(sum == Integer.MAX_VALUE) sum = temp; // tokenArrByMinus의 첫번째 토큰인 경우 temp가 첫번째 수
            else sum -= temp;
        }
        return sum;
    }

    // https://dev-coco.tistory.com/94
    public int solution2(String str){
        int sum = Integer.MAX_VALUE;
        StringTokenizer stMinus = new StringTokenizer(str,"-");
        while (stMinus.hasMoreTokens()){ // 남아있는 토큰이 있으면 true를 리턴, 더 이상 토큰이 없으면 false 리턴
            String token = stMinus.nextToken(); // 객체에서 다음 토큰을 반환
            StringTokenizer stPlus = new StringTokenizer(token, "+");
            int temp = 0;
            while (stPlus.hasMoreTokens()){
                temp += Integer.parseInt(stPlus.nextToken());
            }

            if(sum == Integer.MAX_VALUE) sum = temp;
            else sum -= temp;
        }
        return sum;
    }

    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();
        p1541 problem = new p1541();
        System.out.println(problem.solution(str));
        System.out.println(problem.solution2(str));
    }
}

 


Source

https://st-lab.tistory.com/148

 

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

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

st-lab.tistory.com

https://dev-coco.tistory.com/94

 

[Java] StringTokenizer 문자열 분리하기 (split과 차이는 뭘까?)

StringTokenizer 클래스란? StringTokenizer 클래스는 문자열을 구분자를 이용하여 분리할 때 사용할 수 있습니다. 만일 BufferedReader 클래스의 메서드로 입력을 읽어들인다면 라인 단위로 읽어들일 수 밖

dev-coco.tistory.com