프로그래머스 Lv.0 다항식 더하기

문제 설명
덧셈으로 이루어진 다항식 polynomial이 주어진다.
동류항끼리 더한 결괏값을 문자열로 return하라.
0 < polynomial에 있는 수 < 100
polynomial에 변수는 'x'만 존재한다.
polynomial은 양의 정수, 공백, ‘x’, ‘+'로 이루어져 있다.
항과 연산기호 사이에는 항상 공백이 존재한다.
공백은 연속되지 않으며 시작이나 끝에는 공백이 없다.
하나의 항에서 변수가 숫자 앞에 오는 경우는 없다.
" + 3xx + + x7 + "와 같은 잘못된 입력은 주어지지 않는다.
0으로 시작하는 수는 없다.
문자와 숫자 사이의 곱하기는 생략한다.
polynomial에는 일차 항과 상수항만 존재한다.
계수 1은 생략한다.
결괏값에 상수항은 마지막에 둔다.
0 < polynomial의 길이 < 50
polynomial | result |
"3x + 7 + x" | "4x + 7" |
"x + x + x" | "3x" |
** 풀이 방법
x항을 계산할 xhang과상수항을 계산할 sangsu를 초기화한다.
int sangsu = 0; int xhang = 0;
더하는 연산밖에 없으므로
"+" 기호를 없애준다.
polynomial = polynomial.replace("+", "");
polynomial을 공백으로 자른 배열을 만든다.
String[] poly = polynomial.split(" ");
배열의 원소가 "x"를 포함하고 있으면
1) x의 계수가 2 이상일 때x전까지 정수로 형변환 한 숫자를 xhang에 더한다.2) x의 계수가 1일 때xhang을 1 증가시킨다.
나머지는 상수이므로sangsu에 원소를 정수로 형변환하여 더한다.
for (int i=0; i<poly.length; i++) {
if (poly[i].equals(""))
continue;
else if (poly[i].contains("x")) {
if (poly[i].length() > 1)
xhang += Integer.parseInt(poly[i].substring(0,poly[i].indexOf("x")));
else
xhang++;
}
else
sangsu += Integer.parseInt(poly[i]);
}
xhang이 0일 때
→ sangsu를 문자열로 변환해서 return
xhang이 1일 때
→ 1x로 출력되면 안되기 때문에
상수항이 0보다 크면 "x" + "+" + sangsu문자열로 변환해서 return
상수항이 없으면 "x"만 return한다.
나머지
→ 상수항이 0보다 크면
xhang을 문자열로 변환 + "x" + "+" + sangsu를 문자열로 변환해서 return
상수항이 없으면 xhang문자열로 변환 + "x" return
if (xhang == 0)
answer = Integer.toString(sangsu);
else if (xhang == 1)
answer = (sangsu > 0 ? "x" + " + " + Integer.toString(sangsu) : "x");
else
answer = (sangsu > 0 ? Integer.toString(xhang) + "x" + " + " + Integer.toString(sangsu) : Integer.toString(xhang) + "x");
<> 전체 코드 </>
import java.util.*;
class Solution {
public String solution(String polynomial) {
String answer = "";
int sangsu = 0; int xhang = 0;
polynomial = polynomial.replace("+", "");
String[] poly = polynomial.split(" ");
for (int i=0; i<poly.length; i++) {
if (poly[i].equals(""))
continue;
else if (poly[i].contains("x")) {
if (poly[i].length() > 1)
xhang += Integer.parseInt(poly[i].substring(0,poly[i].indexOf("x")));
else
xhang++;
}
else
sangsu += Integer.parseInt(poly[i]);
}
if (xhang == 0)
answer = Integer.toString(sangsu);
else if (xhang == 1)
answer = (sangsu > 0 ? "x" + " + " + Integer.toString(sangsu) : "x");
else
answer = (sangsu > 0 ? Integer.toString(xhang) + "x" + " + " + Integer.toString(sangsu) : Integer.toString(xhang) + "x");
return answer;
}
}
'개발로그 > 알고리즘' 카테고리의 다른 글
프로그래머스 Lv.0 배열 만들기 6 (0) | 2023.07.31 |
---|---|
프로그래머스 Lv.0 특이한 정렬 (0) | 2023.07.30 |
프로그래머스 Lv.0 문자열 여러 번 뒤집기 (0) | 2023.07.30 |
구간 합 (0) | 2023.07.30 |
프로그래머스 Lv.0 옹알이(1) (0) | 2023.07.30 |
댓글