글 작성자: bbangson
반응형

www.acmicpc.net/problem/1541

 

1541번: 잃어버린 괄호

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

www.acmicpc.net


백준에서 측정한 난이도는 실버2입니다. 규칙만 찾는 것이 중요한 문제입니다. 

'-'를 기준으로 문자열을 파싱을 하고 그 안의 있는 수들은 모두 더해주기만 하면 됩니다. 

 

첫 번째 배열인 arr[0]은 무조건 양수 혹은 '+'기호가 포함된 수식이 됩니다. 그 이후에 배열의 값들은 cal() 메서드를 통해서 더해주기만 하면 되지만 '-'를 기준으로 파싱해주었기 때문에 arr[0]의 값에서 전부 빼주어야 합니다.

 

 

- void main()

입력을 받고 정답을 출력합니다. arr[]은 '-'를 기준으로 파싱해주었고 arr[0]은 따로 cal() 메서드를 먼저 들어가고 그 이후의 인덱스들은 for문을 통해 작동합니다.

 

- int cal() 

더하기 계산만 해주는 메서드입니다. '-'기준으로 파싱해주었기 때문에 빼기 연산은 main문의 for문을 통해서 수행됩니다. 그 외의 모든 연산은 이 메서드에서 수행합니다.  

 

 

  코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BOJ_1541 {
	// BOJ / 1541번 / 잃어버린 괄호 / 수학, 그리디 알고리즘, 문자열, 파싱/ 실버 2
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		//식을 입력받는다.
		String exp = br.readLine();
		String [] arr = exp.split("\\-");
        
        // 첫 -을 만나기 전까지 숫자든 +을 포함하고 있는 식이든 cal 메서드로 보낸다.
        // arr[0]은 양수이거나 +를 포함하고 있는 수식이다.
		int answer = cal(arr[0]); 

		for(int i=1; i<arr.length; i++) {
			answer -= cal(arr[i]); // arr[0]을 제외한 배열의 값은 - 연산자이기 때문에 빼준다.
		}
		System.out.println(answer);
	}
	
	public static int cal(String exp) { // + 계산
		String [] temp = exp.split("\\+");
		int result = 0;
		
		for(int i=0; i<temp.length; i++) {
			result += Integer.parseInt(temp[i]);
		}
		
		return result;
	}
}

 

피드백은 얼마든지 환영합니다.

반응형