반응형
728x90
문제
세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
반응형
입력
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다.
출력
첫째 줄에 정답을 출력한다.
예제 입력 1 복사
55-50+40
예제 출력 1 복사
-35
예제 입력 2 복사
10+20+30+40
예제 출력 2 복사
100
예제 입력 3 복사
00009-00009
예제 출력 3 복사
0
처음에는 - 후에 있는 숫자들을 괄호로 묶어서 계산 하는 방법을 생각했다
50+39-19+349+34-23 이면
50+39-(19+349+34)-23 이렇게 할 생각이였다
그러나 ㅋㅋㅋㅋㅋㅋ 더 쉬운 방법이 있었다
그냥 -가 한번 등장하면 뒤에 오는 +들을 -로 바꿔주면 된다
#include <iostream>
#include <vector>
#include <map>
#include <stack>
#include <string>
#include <sstream>
#include <algorithm>
#include <utility>
#include <math.h>
#include <queue>
using namespace std;
int main() {
string expression;
cin >> expression;
queue <char> signs;
int change = 0;
string num = "";
char lastSign='+';
int minAnswer = 0;
for (char& c : expression) {
if (c == '+' || c == '-') {
if (c == '-') {
change = 1;
if (lastSign == '+') {
minAnswer += stoi(num);
}
else {
minAnswer -= stoi(num);
}
num = "";
lastSign = '-';
}
else {
if (change) {
if (lastSign == '+') {
minAnswer += stoi(num);
}
else {
minAnswer -= stoi(num);
}
num = "";
lastSign = '-';
}
else {
if (lastSign == '+') {
minAnswer += stoi(num);
}
else {
minAnswer -= stoi(num);
}
num = "";
lastSign = '+';
}
}
}
else {
num += c;
}
}
if (lastSign == '+') {
minAnswer += stoi(num);
}
else {
minAnswer -= stoi(num);
}
cout << minAnswer;
cin >> num;
더 클린한 코드는 있겠지만.. 흠
여기서 애 먹었던 부분은 숫자string을 어떻게 int형으로 산수를 하지? 였다
일단
string num="";
로 숫자를 저장할 공간을 마련해두고
num+=c;
하면 뒤에 계속 한자리 숫자가 붙는다
그리고
stoi(num)을 하면
string이 int로 변환된다
결국 stoi() 함수가 다한 문제!!
<[백준/C++] 1464: 1로 만들기>
https://tonnykang.tistory.com/124
반응형
'컴퓨터공학 > 알고리즘' 카테고리의 다른 글
Strassen Algorithm (스트라센 알고리즘) 행렬의 곱 (57) | 2024.03.02 |
---|---|
C++, C 언어 알고리즘 표준 입출력 (58) | 2024.03.01 |
[백준,C++] 1463번: 1로 만들기 (58) | 2024.02.26 |
[백준,C++] 1107 : 리모컨 (49) | 2024.02.20 |
[백준,C++] 1074번 : Z (50) | 2024.02.19 |