한 개 이상의 항의 합으로 이루어진 식을 다항식이라고 합니다. 다항식을 계산할 때는 동류항끼리 계산해 정리합니다. 덧셈으로 이루어진 다항식
polynomial
이 매개 변수로 주어질 때, 동류항끼리 더한 결괏값을 문자열로 return 하도록 solution 함수를 완성해 보세요. 같은 식이라면 가장 짧은 수식을 return 합니다.
- 0 <
polynomial
에 있는 수 < 100polynomial
에 변수는 'x'만 존재합니다.- `polynomial은 0부터 9까지의 정수, 공백, ‘x’, ‘+'로 이루어져 있습니다.
- 항과 연산 기호 사이에는 항상 공백이 존재합니다.
- 공백은 연속되지 않으며 시작이나 끝에는 공백이 없습니다.
- 하나의 항에서 변수가 숫자 앞에 오는 경우는 없습니다.
- " + 3xx + + x7 + "와 같은 잘못된 입력은 주어지지 않습니다.
- "012x + 001"처럼 0을 제외하고는 0으로 시작하는 수는 없습니다.
- 문자와 숫자 사이의 곱하기는 생략합니다.
polynomial
에는 일차 항과 상수항만 존재합니다.- 계수 1은 생략합니다.
- 결괏값에 상수항은 마지막에 둡니다.
- 0 <
polynomial
의 길이 < 50
polynomial | result |
---|---|
"3x + 7 + x" | "4x + 7" |
"x + x + x" | "3x" |
import java.util.*;
class Solution {
public String solution(String polynomial) {
String answer = "";
StringTokenizer st = new StringTokenizer(polynomial, " ");
int [] result = new int[2];
while(st.hasMoreTokens()){
String str = st.nextToken();
if(str.endsWith("x")){
try{
result[0] += Integer.parseInt(str.substring(0, str.length()-1));
}catch (NumberFormatException e){
result[0] +=1;
}
}
else if(str.equals("+")) continue;
else
result[1] += Integer.parseInt(str);
}
answer = result[0] + "x + " + result[1];
if(result[0] == 0)
answer = String.valueOf(result[1]);
if(result[0] == 1)
answer = answer.substring(1);
if(result[1] == 0) {
if(result[0] == 1) answer = "x";
else answer = answer.substring(0, String.valueOf(result[0]).length() + 1);
}
return answer;
}
}
💡 이 문제엔 일차항과 상수항만 있기 때문에 각각의 항의 계수를 저장하고 더할 int형 배열
result
을 하나 만들어 주고, StringTokenizer로 띄어쓰기에 따라 토큰을 분리하는데 만약 각 토큰이 x로 끝나는 거라면 즉, 일차항인 거면 계수를result
의 첫 번째 인덱스에 더해 준다 이때 예외로 토큰이 오직 x인 경우가 있는데 이때는 계수를 1로 간주하고 catch에서result
의 첫 번째 인덱스에 1을 더해 주게 된다 토큰이 +일 때는 그냥 해당 반복문 뛰어넘을 수 있게 해 주고, else일 때, 즉, 상수일 때는result
의 마지막 인덱스의 상수를 더해 주게 된다
💡 배열에 계수를 더해 주는 게 끝났다면 식의 형태를 갖출 수 있게 해 주게 되는데 만약 별 조건이 없으면 일차항의 계수에 x와 + 기호를 붙이고 상수항을 붙여 준 채로 리턴을 해 주게 되지만, 만약 1차항의 계수가 0이면 상수항만 있다는 뜻이므로
answer
에 상수항만 대입해 주게 된다 만약 1차항의 계수가 1이라면 1을 생략해 줘야 하기 때문에 substring()으로 1을 자르고 남은 부분만 다시answer
에 넣어 주었다 만약 상수항이 0일 때, 일차항도 0이면answer
에 그냥 x만 대입해 주고, 아닐 시에는 일차항의 계수와 x까지만 substring()으로 잘라서 다시answer
에 넣어 주었다
내가 봐도 좀 효율이 떨어지는 코드인 것 같긴 함... 🤔