https://school.programmers.co.kr/learn/courses/30/lessons/120863
일단 string의 공백을 모두 제거해주었다.
x앞의 숫자를 담을 xnum과 상수를 담을 num을 추가했다. 한글자 한글자 검사해가면서 x이면 a에 들어있는 숫자를 검사해서 없으면 1x이고 있으면 해당 숫자x이다.
+면 a에 숫자가 담겨있을 경우 num에 더해주고 a를 비운다.
for가 끝나고 숫자가 남아있으면 num에 더해준다.
이제 나온 xnum과 num을 기반으로 새로 문자열을 작성해준다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
string solution(string polynomial) {
string answer = "";
string a = "";
int xnum = 0;
int num = 0;
polynomial.erase(remove(polynomial.begin(), polynomial.end(), ' '), polynomial.end());
for(int i = 0; i < polynomial.length(); i++)
{
if(polynomial[i] == 'x')
{
if(a.length() == 0)
xnum++;
else
{
xnum += stoi(a);
a.clear();
}
}
else if (polynomial[i] == '+')
{
if(a.length() != 0)
{
num += stoi(a);
a.clear();
}
}
else
a += polynomial[i];
}
if(a.length() != 0)
num += stoi(a);
if(num == 0)
{
if(xnum != 1)
answer += to_string(xnum);
answer += 'x';
}
else if(xnum == 0)
{
answer += to_string(num);
}
else if(num == 0 && xnum == 0)
return answer;
else
{
if(xnum != 1)
answer += to_string(xnum);
answer += 'x';
answer += ' ';
answer += '+';
answer += ' ';
answer += to_string(num);
}
return answer;
}
#include <string>
#include <sstream>
using namespace std;
string solution(string p) {
stringstream ss(p);
string temp;
int xsum = 0, nsum = 0;
while (getline(ss, temp, ' ')) {
if (temp.back() == 'x') {
if (temp.size() == 1) xsum++;
else xsum += stoi(string(temp.begin(), temp.end() - 1));
}
else if(temp!="+") nsum += stoi(temp);
}
if (xsum == 0) return to_string(nsum);
else {
string xres;
if (xsum == 1) xres = "x";
else xres = to_string(xsum) + "x";
if (nsum == 0) return xres;
else return xres + " + " + to_string(nsum);
}
}
stringstream을 사용해서 파싱하였다. getline(char*, streamsize, char) 3번째 인자는 해당 인자를 만나면 그 직전까지 읽는다. 파싱한 문자의 끝이 x면 xsum이 몇인지 계산해서 더해준다. +를만나면 모아둔 숫자를 nsum에 더해준다.
완성한 xsum과 nsum으로 string을 만들어서 리턴해준다.