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

YH·2023년 7월 19일
0

문제

다항식 더하기 : 문제 링크


문제 분석

  • 한 개 이상의 항의 합으로 이루어진 식을 다항식이라고 하며, 계산할 때는 동류항끼리 계산해 정리한다.
  • 덧셈을 이루어진 다항식 polynomial이 매개변수로 주어질 때, 동류항끼리 더한 결괏값을 문자열로 return 하며, 같은 식이라면 가장 짧은 수식을 return
  • 문자열 format을 파싱할 때 사용하는 stringstream 클래스를 사용하기 위해 sstream을 헤더에 포함
  • stringstream 변수 ss에 문자열 polynomial를 넣어 초기화하고, 공백을 기준으로 분리된 문자열을 temp에 저장 및 문자열 벡터 s_list에 추가
  • 문자열 마지막 인덱스에 'x'가 있고, size가 1인 경우, 즉 x밖에 없을 경우에는 변수 x에 1을 더해준다. 아닌 경우에는 문자열을 추출하는 substr() 함수를 사용하여 0번째 인덱스부터 'x'이전의 위치의 숫자까지 문자를 stoi() 함수로 정수화하여 x에 더해준다.
  • 문자가 "+"일 경우는 넘어가고, 이외의 경우는 숫자만 있는 경우이므로 stoi()로 정수로 변환후 변수 y에 더해준다.
  • 이후, 가장 짧은 수식을 return 하도록 if ~ else문으로 각 조건을 설정하여 answer 문자열에 to_string() 함수를 사용하여 저장하고 answer을 return

substr() 함수 사용법
1. substr(시작인덱스, 문자열 길이)
=> 시작인덱스 부터 주어진 문자열 길이만큼 추출
2. substr(시작인덱스)
=> 시작인덱스 부터 문자열 끝까지 추출

유사문제
컨트롤 제트 : 문제 링크
문자열 계산하기 : 문제 링크
OX퀴즈 : 문제 링크


풀이

#include <string>
#include <vector>
#include <sstream>

using namespace std;

string solution(string polynomial) {
    string answer = "";
    vector<string> s_list;
    stringstream ss(polynomial);
    string temp;
    int x = 0, y = 0;
    
    while(ss >> temp) s_list.push_back(temp);
    for(int i = 0; i < s_list.size(); i++) {
        if(s_list[i][s_list[i].size() - 1] == 'x') {
            if(s_list[i].size() == 1) x += 1;
            else x += stoi(s_list[i].substr(0, s_list[i].size() - 1));
        }
        else if(s_list[i] == "+") continue;
        else y += stoi(s_list[i]);
    }
    if(x != 0){
        if(x == 1) answer += "x";
        else answer += to_string(x) + "x";
    }
    if(y != 0){
        if(answer != "") answer += (" + " + to_string(y));
        else answer += to_string(y);
    }
    return answer;
}
profile
Keep Recycling Your Dreams

1개의 댓글

comment-user-thumbnail
2023년 7월 19일

이렇게 유익한 내용을 공유해주셔서 감사합니다.

답글 달기