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;
'알고리즘 > 코딩 테스트 문제' 카테고리의 다른 글
[프로그래머스] 문자열 내림차순으로 배치하기(Java) (0) | 2023.10.10 |
---|---|
[프로그래머스] OX퀴즈(C) (0) | 2023.09.26 |
[프로그래머스] 등수매기기(C) (0) | 2023.09.21 |
[프로그래머스] 문자열 계산하기(C) (0) | 2023.09.21 |
[프로그래머스] 영어가 싫어요(C) (0) | 2023.09.21 |