[백준(Baekjoon)][자바(java)] 1541 : 잃어버린 괄호 / 그리디 알고리즘

728x90

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

 

1541번: 잃어버린 괄호

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

www.acmicpc.net

 

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		String[] ex = sc.nextLine().replace("-", " -").replace("+", " +").split(" ");
		int n = ex.length, sum = 0;
		int[] num = new int[n];
		for( int i = 0; i < n; i++ )
			num[i] = Integer.parseInt( ex[i] );

		boolean isNegative = false;
		for( int i = 0; i < n; i++ ) {
			if( isNegative && num[i] > 0 ) 
				num[i] *= -1;
			if( num[i] < 0 ) 
				isNegative = true;	
			sum += num[i];
		}

		System.out.println( sum );
		
		sc.close();
		
	}
}

 

- 부호 앞에 공백을 넣어주고 공백을 구분자로 삼아서 문자열을 자름

- Integer.parseInt() 함수로 String->int로 형변환 후 배열에 차례로 담아줌

- 배열을 순차적으로 탐색하며 배열의 값을 더해나감

- 음수를 만난 순간부터 모든 양수는 음수로 치환하여 더함

- 최솟값 출력

반응형