Notice
Recent Posts
Recent Comments
Link
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
Today
Total
관리 메뉴

mo1lusca의 블로그

[백준] 1541 잃어버린 괄호 - C++ 본문

PS

[백준] 1541 잃어버린 괄호 - C++

mo1lusca 2025. 6. 18. 00:42

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


그리디 알고리즘을 사용해서 풀면 된다.

말이 알고리즘이지 실버쯤 되는 그리디 문제는 무지성으로 풀어도 풀린다..

 

값을 최소로 만들려면, "-" 뒤에 오는 값이 최대가 되도록 괄호를 쳐주면 된다!

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main() {
	string s;
	string buf = "";
	cin >> s;
	int len = s.length();
	int result = 0;
	bool is_minus = false;
	for (int i = 0; i <= len; i++) {
		if (s[i] == '-' || s[i] == '+' || i == len) {
			if (is_minus) {
				result -= stoi(buf);
				buf = "";
			}
			else {
				result += stoi(buf);
				buf = "";
			}
		}
		else {
			buf.push_back(s[i]);
		}
		if (s[i] == '-') {
			is_minus = true;
		}
	}
	cout << result;
	return 0;
}

 

알고리즘 분류에 문자열과 파싱이 있는걸 보고 잠시 어지러웠지만,

C에서 C++로 건너온 우리에게는 string 자료형과 stoi라는 몹시 뛰어난 편의성의 함수가 있다!! (감동의 도가니)

 

괄호를 쳐서 최솟값을 만든다는게, "-" 뒤의 값들을 최대가 되게 묶어주면 된다고 이야기했었다.

묶어준다는건, 묶은 괄호 내의 "+" 연산자를 모두 "-"로 바꾼다는 뜻이기도 하다.


'PS' 카테고리의 다른 글

[백준] 34030 So☆Lucky - C++  (1) 2025.06.23
[백준] 1931 회의실 배정 - C++  (0) 2025.06.18
[백준] N과 M (시리즈) - C++  (1) 2025.06.08
[백준] 7576 토마토 - C++  (0) 2025.06.05
[백준] 2606 바이러스 - C++  (1) 2025.06.03