본문 바로가기
개발로그/알고리즘

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

by 쩜징 2023. 7. 30.

프로그래머스 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;
    }
}

반응형

댓글