반응형

문제

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

 

1541번: 잃어버린 괄호

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

www.acmicpc.net

해결 방법

  • 5자리 이상의 수가 입력되지 않고, 식의 길이가 50이하이기 때문에 int 형으로 해결 가능
  • 괄호를 사용해 최소값을 만들기 위해서는 빼주는 값을 최대로 만들어 주면 됨
  • ex) a + b + c - d + e + f - g - h 라고 가정해보자 ( a ~ h는 양의 정수 )
  • 이 결과를 최소로 만들어보면 a + b + c - (d + e + f) - g - h 가 됨
  • 정리해보면 - 부호 뒤에 + 부호가 나오면 괄호를 쳐줘서 빼기 연산을 하게 하고 - 부호 뒤에 - 부호가 나오면 괄호를 끝내서 빼기 연산을 하게 하면 됨
  • 더 간단하게 생각해보면 처음 - 부호 뒤의 정수들은 모두 빼주면 됨

코드

import java.util.Scanner;

public class p1541 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        str += '=';
        int ans = 0;
        int temp = 0;
        boolean minus = false;  // minus가 한번 나오면 그 뒤는 모두 빼줌

        for(int i = 0 ; i < str.length() ; i ++) {
            char c = str.charAt(i);
            if(c >= '0' && c <= '9') {
                temp = temp * 10 + (c - '0');
            } else {
                if(minus == true) {
                    ans -= temp;
                } else {
                    ans += temp;
                    if(c == '-') {
                        minus = true;
                    }
                }
                temp = 0;
            }
        }

        System.out.println(ans);
    }
}
반응형

↓ 클릭시 이동

복사했습니다!