[프로그래머스/C++]Lv.0 - 다항식 더하기

YH J·2023년 4월 18일
0

프로그래머스

목록 보기
36/168

문제 링크

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을 만들어서 리턴해준다.

profile
게임 개발자 지망생

0개의 댓글