알고리즘 문제 풀이 - 다항식 더하기

0

TIL

목록 보기
103/126

덧셈으로 이루어진 다항식 polynomial이 매개변수로 주어질 때, 동류항끼리 더한 결괏값을 문자열로 return 하도록 solution 함수를 완성해보세요.

public String solution(String polynomial) {
    String answer;
    int variable = 0;
    int constant = 0;
    
    String[] polyArray = polynomial.split(" ");
    
    for (int i = 0; i < polyArray.length; i++) {
        if (polyArray[i].contains("x")) {
            if (polyArray[i].equals("x")) {
                variable++;
            } else {
                variable += Integer.parseInt(polyArray[i].replaceAll("x", ""));
            }
        } else {
            constant += Integer.parseInt(polyArray[i]);
        }
    }

    if (variable == 0) {
        answer = String.valueOf(constant);
    } else if (variable == 1) {
        answer = "x + " + constant;
    } else if (constant == 0) {
        answer = variable + "x";
    } else {
        answer = variable + "x + " + constant;
    }

    return answer;
}

이렇게 작성 후 실행해봤더니 에러가 발생했다.

알고보니 매개변수로 들어오는 polynomial이 "3x + 7 + x" 이런 식으로 돼있어서 내가 실수로
생각으로는 배열이 {"3x", "7", "x"} 이처럼 되도록 원한게
{"3x", "+", "7", "+", "x"} 이렇게 돼서 "+"를 정수로 변환할 수 없어 발생한 에러였다.

그래서 정규식을 수정하였다.

String[] polyArray = polynomial.split("\\s*\\+\\s*");

사용한 정규식 설명

\\s* : 0개 이상의 공백 문자를 표현하는 특수한 정규식 패턴. *는 바로 앞의 패턴이 0번 이상 반복될 수 있음을 의미한다.

\\+: 이 부분은 "+" 문자를 정규식으로 표현한 것.

따라서 정규식 "\\s*\\+\\s*"은 공백과 "+" 문자가 함께 나오는 경우를 검색하는데 사용된다.
예를 들어 "3x + 7 + x"와 같은 문자열에서 "+" 앞뒤에 공백이 있거나 없는 모든 경우를 검색하여 항을 분리한다.


수정 후 실행해봤는데
테스트 케이스 10번에서 실패가 떠버렸다.

아무래도 answer를 정하는 if문에서 놓친 부분이 있겠구나 싶어서 고민해보니

매개변수로 "x" 이렇게만 들어왔을 때가 문제였다...

	if (polynomial.equals("x")) {
        answer = "x";
    } else if (variable == 0) {
        answer = String.valueOf(constant);
    } else if (variable == 1) {
        answer = "x + " + constant;
    } else if (constant == 0) {
        answer = variable + "x";
    } else {
        answer = variable + "x + " + constant;
    }

내 나름대로 수정해서 성공은 했지만 보기가 좋아보이지 않아서 코드를 다듬기로 했다.

// 변수의 계수를 우선적으로 정한 뒤 정수 유무에 따라서 정함
    if (variable == 0) {                    // 변수의 계수가 0일 때
        answer = String.valueOf(constant);  // 정수만 반환
    } else if (variable == 1) {         // 변수의 계수가 1일 때
        answer = "x";                   // 변수의 계수를 생략
        if (constant != 0) {            // 근데 그와중에 정수가 0이 아니면
            answer += " + " + constant; // 변수에 계수 생략한거에 정수를 붙임
        }
    } else {                            // 그 외에는
        answer = variable + "x";        // 변수의 계수를 정하고
        if (constant != 0) {            // 정수가 0이 아니면
            answer += " + " + constant; // 변수 뒤에 정수를 더함
        }
    }

0개의 댓글