알고리즘

다항식 더하기 - 프로그래머스

WhNi 2024. 6. 18. 17:12
#include <string>
#include <vector>
#include <sstream>
#include <cctype>
#include <iostream>

using namespace std;

string solution(string polynomial) 
{
    string answer = "";
    
    // 공백으로 나뉠 string 담는 vector
    vector<string> terms;
    istringstream iss(polynomial);
    string term;
    
    //x의 동류항 지수
    int Xnum =0;
    //x의 동류항 문자
    string Xletter = "x";
    
    // 숫자부
    string num = "";
    int tempnum =0;
    
    // 공백으로 문자열 분리하기
    while(iss >> term)
    {
        terms.emplace_back(term);
    }
    
    // vector 순환
    for(string a : terms)
    {
        // x가 들어간 data
        if(a.find('x') != string::npos)
        {
            // 지수가 없을때
            if(a == "x")
            {
                Xnum++;
            }
            // 지수가 있을때
            else
            {
                Xnum += stoi(a);
              //  cout<< Xnum << endl;
            }
        }
        else if (a.find('+') != string::npos)
        {
            continue;
        }
        // x 가 안들어간 data
        else
        {
            tempnum += stoi(a);
           // cout << tempnum << endl;
         	num = to_string(tempnum);
           // cout << num << endl;
        }
    }
   
    cout << to_string(Xnum) +Xletter << endl;
    string plus = " + ";
    
    // 지수가 맨 앞에 오는데, Xnum이 1일때 
    
    if(Xnum == 0)
    {
        answer = num;
    }
    else if (Xnum == 1 && num != "")
    {
        answer = Xletter + plus + num;
    }
    else if (Xnum == 1 && num == "")
    {
        answer = Xletter;
    }
    else
    {
        if( num == "")
        {
            answer = to_string(Xnum) + Xletter;
        }
        else
        {
        	answer = to_string(Xnum) + Xletter + plus + num;
        }
    }
       
    return answer;
}

 

완전 경우의 수 하나하나 지워서 다 푼거 같다. IDE 안쓰고 cout으로만 디버깅해서 연습하는데 역시 시간이 오래걸린다. 속도를 좀 더 붙이는 연습을 해야겠다. 디버깅하면 더 빠르고 재밌게 푸는데, 없이 하려니 좀 빡세긴 하다. 컴파일러가 얼마나 중요한지 알게되는 시점이다. 

 

마지막 조건들을 저런식으로 푸는게 아니라

 

// 지수가 0 일때
if (Xnum == 0) 
{
    answer = num;
} 
// 지수가 0이 아닐때
else 
{
	// 지수가 1일때
    if (Xnum == 1) 
    {
        answer = Xletter;
    }
    // 지수가 1이 아닐때
    else 
    {
        answer = to_string(Xnum) + Xletter;
    }
    
    // num에 숫자가 있으면 + 와 num 추가 , 없다면 아무것도 추가 X
    if (!num.empty()) 
    {
        answer += " + " + num;
    }
}

이렇게 했어야 했다. 

 

 

테스트케이스 이것저것 제거해보느라 너무 날것으로 제출해버렸다. 아래로 수정하면 좀 더 깔끔해보인다.