BOJ 1541. 잃어버린 괄호
🙇♀️[Silver II] 잃어버린 괄호 - 1541
성능 요약
메모리: 2028 KB, 시간: 0 ms
분류
그리디 알고리즘, 수학, 파싱, 문자열
제출 일자
2023년 12월 29일 16:53:54
문제 설명
세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
입력
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다.
출력
첫째 줄에 정답을 출력한다.
🚀풀이
먼저 수식을 string으로 받고 숫자와 기호를 구분해야한다.
숫자를 저장할 배열과 기호를 저장할 배열을 만들고 각 배열을 채워준다.
문제를 해결할 로직을 이 이후인데 -
기호를 발견하면 다음 -
기호를 만날때까지 임시적으로 값을 더해준다.
그 다음 결과 값에 임시값을 빼준다.
+
를 만나면 그냥 결과값에 더해주면 된다.
void solve()
{
int pos = 0, pos2 = 0;
res = numbers[pos];
while (true)
{
if (signs[pos2] == "-")
{
pos2++;
int temp = 0;
while (signs[pos2] != "-" && pos2 < p2)
{
pos++;
temp += numbers[pos];
pos2++;
}
pos++;
temp += numbers[pos];
res -= temp;
}
else if (signs[pos2] == "+")
{
pos++;
pos2++;
res += numbers[pos];
}
if (pos == p1)
break;
}
cout << res;
}
🚀전체 코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include<iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
string str;
int numbers[51];
string signs[51];
int p1 = 0, p2 = 0, res = 0;
// -가 나오면 다음 -가 나올 때까지 그 사이는 다 더해주고 빼기
void setting()
{
cin >> str;
int temp = 0;
for (int i = 0; i < str.size(); ++i)
{
if (str[i] != '+' && str[i] != '-')
{
temp *= 10;
temp += str[i] - '0';
}
else
{
numbers[p1] = temp;
p1++;
signs[p2] = str[i];
p2++;
temp = 0;
}
}
numbers[p1] = temp;
}
void solve()
{
int pos = 0, pos2 = 0;
res = numbers[pos];
while (true)
{
if (signs[pos2] == "-")
{
pos2++;
int temp = 0;
while (signs[pos2] != "-" && pos2 < p2)
{
pos++;
temp += numbers[pos];
pos2++;
}
pos++;
temp += numbers[pos];
res -= temp;
}
else if (signs[pos2] == "+")
{
pos++;
pos2++;
res += numbers[pos];
}
if (pos == p1)
break;
}
cout << res;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
//freopen("input.txt", "rt", stdin);
setting();
solve();
return 0;
}