728x90
문자열 파싱을 연습해볼수 있는 괜찮은 문제이다. 풀이 방법은 여러가지 존재하는데 보통 풀이는 다음과 같다.
최솟값을 만들기 위해 가능한 가장 큰 숫자를 빼야 한다. 따라서 - 를 기준으로 문자를 나누고 다음 - 를 만나기 전까지 모두 더해서 한번에 빼주면 된다.
나는 조금 고전적이지만 스택을 사용하여 숫자와 - 기호를 쌓았다. 이후 하나씩 빼면서 - 를 만나기 전까지 결과를 모두 더하고 - 를 만나면 더한 값을 -1곱하여 누적 시켜주었다.
#include<iostream>
#include<string>
#include<vector>
#include<cmath>
#include<stack>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
string s;
cin >> s;
stack<string> st;
vector<int> v;
int num = 0;
int start = 0;
int cnt = 0;
for(int i = 0; i <= s.size(); i++)
{
string sub;
if(s[i] == '+' || s[i] == '-' || i == s.size())
{
sub = s.substr(start, cnt);
start = i + 1;
cnt = 0;
}
else
{
cnt++;
continue;
}
st.push(sub);
if(s[i] == '-')
{
st.push("-");
}
}
int minNum = 0;
while(!st.empty())
{
string top = st.top();
st.pop();
if(top != "-")
{
num += stoi(top);
continue;
}
else
{
num *= -1;
minNum += num;
}
num = 0;
}
minNum += num;
cout << minNum;
}
반응형
'알고리즘 > boj' 카테고리의 다른 글
BOJ 1744 수 묶기 (0) | 2022.12.31 |
---|---|
BOJ 1339 단어 수학 (0) | 2022.12.30 |
BOJ 1766 문제집 (0) | 2022.12.30 |
BOJ 1967 트리의 지름 (0) | 2022.12.29 |
BOJ 1920 수 찾기 (0) | 2022.12.28 |