https://www.acmicpc.net/problem/1541
1541번: 잃어버린 괄호
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다
www.acmicpc.net
푸는데 너무너무 오래걸린 문제다.
완전 수학문제인데, 처음에 했던 생각안에 갇혀서 그 방법으로만 생각하다가 엉켰다..
심기일전하는 마음으로 코드 싹날리고
구현계획부터 다시짰다.
그러니까 대충 감이왔다.(ㅡㅡ'';; 진즉일케하지..!!!)
// 잃어버린 괄호
#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;
int getNum(string currNumString)
{
int getnum = 0;
int idx = 0;
for (int i = currNumString.length() - 1; i >= 0; i--)
{
getnum += (currNumString[idx++] - 48) * pow(10, i);
}
return getnum;
}
int main()
{
// TODO : 먼저 입력을 어떻게 받을 지 생각
// 1. 문자열로 받음?
// 2. 숫자랑 기호를 번갈아담아
string input;
int rst = 0;
cin >> input;
string currNumString = "-1";
int tempNum = 0;
bool isStartBracket = false;
for (auto &element : input)
{
if (isdigit(element))
{ // 숫자인 경우
if (currNumString == "-1")
{ // 미정의인 경우
currNumString = element;
}
else
{ // 정의인 경우
currNumString += element;
// cout << currNumString << endl;
}
}
else
{ // 연산자인 경우
if (element == '+')
{
if (isStartBracket)
{
tempNum += getNum(currNumString);
}
else
{
tempNum += getNum(currNumString);
}
}
else
{
if (isStartBracket)
{ // - 뒤의 숫자를 결과에 추가해야한다.
tempNum += getNum(currNumString);
rst -= tempNum;
tempNum = 0;
}
else
{
tempNum += getNum(currNumString);
rst += tempNum;
tempNum = 0;
}
isStartBracket = true;
}
currNumString = "-1";
}
}
tempNum += getNum(currNumString);
if (isStartBracket)
{
rst -= tempNum;
cout << rst;
}
else
cout << tempNum;
}
덧붙이자면, getNum은 내가 문자열을 숫자로 만들어주는 함수를 만들었다.
다른 내장함수가 있긴했는데 (머엿지.. a로 시작하는거였다)
무튼 잘 안돼서 열받은 김에 만든거고..
이래저래 조건문에 들어맞게 구현했다.
728x90
'백준이당' 카테고리의 다른 글
[C++] 백준 1158번 : 요세푸스 문제 (0) | 2024.01.14 |
---|---|
[C++] 백준 1789번 : 수들의 합 (0) | 2023.12.03 |
[C++] 백준 2839번 : 설탕배달 (1) | 2023.11.30 |
[C++] 백준 1065번 : 한수 (0) | 2023.11.28 |
[C++] 백준 11399번 : ATM (0) | 2023.11.27 |