유블로그

[Java] BOJ 1541 잃어버린 괄호 본문

알고리즘

[Java] BOJ 1541 잃어버린 괄호

yujeong kang 2021. 4. 30. 00:48

[Java] BOJ 1541 잃어버린 괄호

 

www.acmicpc.net/problem/1541

 

1541번: 잃어버린 괄호

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

www.acmicpc.net

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class BOJ_1541_잃어버린괄호 {
	static String str;
	static List<String> list;

	public static void main(String[] args) throws Exception {
		input();
		
		int SUM = Integer.parseInt(list.get(0));
		int i = 1;
	out:while(true) {
			if(i >= list.size()) break;
			char oper = list.get(i).charAt(0);
			if (oper == '-') {
				int sum = Integer.parseInt(list.get(i + 1));
				int idx = i+2;
				while(true) {
					if(idx >= list.size()) {
						SUM -= sum;
						break out;
					}
					if(list.get(idx).charAt(0) != '+') break;
					if(list.get(idx).charAt(0) == '+') {
						sum += Integer.parseInt(list.get(idx+1));
						idx+=2;
					}
				}
				SUM -= sum;
				i = idx;
			} else {
				SUM += Integer.parseInt(list.get(i + 1));
				i+=2;
			}
		}

		System.out.println(SUM);

	} // main

	static void input() throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		str = br.readLine();
		list = new ArrayList<>();
		String s = "";
		for (int i = 0; i < str.length(); i++) {
			if (Character.isDigit(str.charAt(i))) {
				s += str.charAt(i);
			} else {
				list.add(s);
				s = "";
				list.add(Character.toString(str.charAt(i)));
			}
		}
		if (s.length() > 0)
			list.add(s);
	}
}

 

실버 2인데... 문제를 잘못 접근해서 엄청 오래 풀었다.

괄호 내에 숫자가 두 개만 들어간다고 생각하고 풀었었다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 

그게 아니라는 걸 깨닫고 나서는... 수식을 몇 개 적어보다가

- 가 나왔으면 그 뒤 +는 다 괄호로 묶어 다 더하고 다시 - 가 나왔을 때 앞에 더했던 걸 빼주면 되겠다 싶어서

 

입력을 부호와 숫자 List 로 넣어주고 while 문으로 순회하는데 - 가 나왔다면 + 가 그만 나올 때까지 또 while문 순회하면서 쭉 더하고, - 가 다시 나오면 sum 에 합한 걸 빼는 식으로 2중 while로 했다.

 

 

그런데 다른 사람들 풀이를 보니 매우 똑똑하게 풀었더라..

 

입력을 먼저 - 로 split 하고

뭉텅이들을 + 로 또 split해서 더한 덩어리들을 

쭉 마이너스 하는 식... wow

 

어쩜 저런 생각을 하지 멋지다

'알고리즘' 카테고리의 다른 글

[Java] BOJ 4949 균형 잡힌 세상 백준  (0) 2021.05.03
[Java] BOJ 5430 AC 백준  (0) 2021.05.02
[Java] BOJ 2212 센서  (0) 2021.04.28
[Java] BOJ 2470 두 용액  (0) 2021.04.26
[Java] BOJ 19237 어른상어  (0) 2021.04.25