[백준/BOJ] 백준 1541번 : 잃어버린 괄호
2020. 6. 15. 03:39ㆍ알고리즘 문제풀이
https://www.acmicpc.net/problem/1541
-를 만나면 해당 -뒤에 괄호를 열고( ( ), 다음 -가 나오는 위치 뒤에 괄호를 닫는다( ) ).
다음 -가 나오지 않는다면 수식의 끝 부분에 괄호를 닫는다.
코드
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
cin.tie(NULL);
ios_base::sync_with_stdio(false);
string input;
vector<int> num;
string s_temp;
int cnt = 0;//num벡터에 있는 숫자들의 몇번째를 다룰지 표시하는 변수
int sum = 0;
int tempsum = 0;
//수식을 입력받는다.
cin >> input;
//+,-를 제외한 숫자들을 입력 순서대로 벡터 num에 넣는다
for (int i = 0; i < input.size(); i++)
{
if (input[i] != '+' && input[i] != '-')
{
s_temp += input[i];
}
else
{
num.push_back(stoi(s_temp));
s_temp.clear();
}
//수식의 마지막 숫자도 넣는다.
if (i == input.size() - 1)
{
num.push_back(stoi(s_temp));
s_temp.clear();
}
}
//현재 cnt는 0이므로 첫번째 숫자는 무조건 합에 들어가니 더한다
sum += num[cnt];
cnt++;
for (int i = 0; i < input.size(); )
{
//+가 나오면 +뒤의 숫자를 sum에 합한다
if (input[i] == '+')
{
sum += num[cnt];
cnt++;
i++;
}
//-가 나오면 -뒷 숫자 부터 다음 - 가 나오기 전 숫자들을 모두 tempsum에 더한다
//수식의 끝까지 다음 -가 나오지 않는다면 수식의 끝까지 숫자들을 모두 tempsum에 더한다
//이것은 -뒤 부터 다음 -가 나오기 전 까지 또는 다음 -가 나오지 않는다면 수식의 끝 부분까지의 수식들을 괄호 친것을 의미한다
// 예) a-(b+c+d)-e 또는 a-(b+c+d)
//tempsum은 마지막에 뺼 합들이다
else if (input[i] == '-')
{
tempsum += num[cnt];
cnt++;
for (int j = i + 1; i < input.size(); j++)
{
//-가 나오면 -이전 부분에 괄호를 닫은것 이다
//i는 j위치부터 다시 시작한다
if (input[j] == '-')
{
i = j;
break;
}
//괄호를 닫지 않고 tempsum에 더해간다
else if (input[j] == '+')
{
tempsum += num[cnt];
cnt++;
}
//수식의 끝에 도달했다면 괄호를 닫을 수 밖에 없다
if (j == input.size() - 1)
{
i = j;
break;
}
}
}
else
i++;
}
//괄호친 부분을 뺸다
cout << sum - tempsum;
return 0;
}
'알고리즘 문제풀이' 카테고리의 다른 글
[백준/BOJ] 백준 10718번 : We love kriii (0) | 2020.06.17 |
---|---|
[백준/BOJ] 백준 2557번 : Hello World (0) | 2020.06.16 |
[백준/BOJ] 백준 10610번 : 30 (0) | 2020.06.14 |
[백준/BOJ] 백준 1000번 : A+B (0) | 2020.06.13 |
[백준/BOJ] 백준 1049번 : 기타줄 (0) | 2020.06.12 |