본문 바로가기
알고리즘/코딩 테스트 문제

[프로그래머스] 다항식 더하기(C)

by 진진리 2023. 9. 25.
728x90
  • 처음 풀이
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
char* solution(const char* polynomial) {
    // return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
    char* answer = (char*)malloc(sizeof(char)*50);
    int index=0;
    int var = 0;
    int cnst = 0;
    int flag = 0;
    int temp = 0;
    
    while(polynomial[index]){
        if(polynomial[index]>='0'&&polynomial[index]<='9'){
            if(flag == 0) temp += (int)(polynomial[index]-'0');
            else temp = temp*10 + (int)(polynomial[index]-'0');
            flag = 1;
        }
        else if(polynomial[index]=='x'){
            if(flag == 0) var++;
            else var += temp;
            temp = 0;
            flag = 0;
        }
        else{
            if(flag == 1) cnst += temp;
            temp = 0;
            flag = 0;
        }
        index++;
    }
    cnst += temp;
    
    index = 0;
    if(var > 1){
        int a = 1;
        int val = var;
        while(a<=val) a*= 10;
        a /= 10;
        while(a){
            answer[index++] = '0' + val/a;
            val %= a;
            a /= 10;
        } 
    } 
    if(var > 0) answer[index++] = 'x';
    if(cnst > 0){
        if(var > 0){
            answer[index++] = ' ';
            answer[index++] = '+';
            answer[index++] = ' ';
        }
        int a = 1;
        while(a<=cnst) a*= 10;
        a /= 10;
        while(a){
            answer[index++] = '0' + cnst/a;
            cnst %= a;
            a /= 10;
        }
    }
    answer[index] = '\0';

    return answer;
}

입력받은 polynomial에서 x의 계수와 상수를 구하는 것까지는 나름 간단했는데

구한 결과를 식으로 answer에 대입하는 과정이 어려웠음

-> 문자열에 문자를 삽입하는게 어려워서 문자 하나씩 대입함

-> 숫자는 가장 큰 자릿수부터 하나씩 대입

-> 계수가 1이면 생략, 계수가 없으면 상수만 출력 등의 조건

 

  • 다른 사람의 풀이 참조 후 밑의 코드 수정

sprintf(배열, 서식, 값);

sprintf(answer, "%dx + %d", var, cnst); 이렇게 표현 가능!

 


    if(cnst > 0){
        if(var > 1) sprintf(answer,"%dx + %d",var ,cnst);
        else if(var == 1) sprintf(answer,"x + %d",cnst);
         else if (var == 0) sprintf(answer,"%d",cnst);
    }
    else{
        if(var > 1) sprintf(answer,"%dx",var);
        else if(var == 1) answer = "x";
        else answer = "";
    }

    return answer;