알고리즘
다항식 더하기 - 프로그래머스
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;
}
}
이렇게 했어야 했다.
테스트케이스 이것저것 제거해보느라 너무 날것으로 제출해버렸다. 아래로 수정하면 좀 더 깔끔해보인다.