문제풀이/Greedy

[PS] BOJ1541 잃어버린 괄호 ( greedy ) with JAVA

IT록흐 2023. 7. 20. 11:14
반응형

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;

//BOJ1541 잃어버린 괄호
public class Greedy3 {
    public static void main2(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();
        boolean isPlus = true;

        int ans = 0;
        for (int i =0;i<str.length();i++) {
            String digit = "";

            if(Character.isDigit(str.charAt(i))){
                while(i < str.length() && Character.isDigit(str.charAt(i))){
                    digit += str.charAt(i);
                    i++;
                }
                if(isPlus) ans += Integer.parseInt(digit);
                else ans -= Integer.parseInt(digit);
            }
            if( i < str.length() && str.charAt(i) == '-') isPlus = false;
        }
        System.out.println(ans);
    }
}

 

나는 구분자로 문자열을 분리하지 않고 풀었는데, 구분자로 문자열을 분리하여 푸는 것도 좋은 풀이인 것 같다. 이는 아래 링크를 참고하면 된다. 

 

https://recordofwonseok.tistory.com/441

 

(Java/자바) - 백준(BOJ) 1541번 : 잃어버린 괄호

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

recordofwonseok.tistory.com

 

반응형