[프로그래머스] 다항식 더하기

김준영·2023년 3월 10일
1

코딩테스트

목록 보기
2/22

문제


한 개 이상의 항의 합으로 이루어진 식을 다항식이라고 합니다. 다항식을 계산할 때는 동류항끼리 계산해 정리합니다. 덧셈으로 이루어진 다항식 polynomial이 매개변수로 주어질 때, 동류항끼리 더한 결괏값을 문자열로 return 하도록 solution 함수를 완성해보세요. 같은 식이라면 가장 짧은 수식을 return 합니다.

https://school.programmers.co.kr/learn/courses/30/lessons/120863

내 풀이

  1. 공백 제거 후, '+' 기준으로 split()
  2. 반복문 사용하여 x포함하는 문자, 상수를 나눈다.
  3. 0 ~ 9까지 숫자만 사용하므로 charAt을 사용하여 x 앞에 숫자 가지고 와 더해준다.
  4. 상수도 따로 더해준다.
  5. x 계수가 0, 상수항이 0, x 계수가 1 이 세 경우를 조건을 걸어 리턴

위 순서대로 코딩을 진행했다.

class Solution {
    public String solution(String polynomial) {
        int x_value = 0;
        int value = 0;

        String[] rep = polynomial.replace(" ", "").split("\\+");
        
        for(String str : rep){
            if(str.contains("x")){
                if(str.charAt(0) == 'x') x_value++;
                else x_value += Integer.parseInt(String.valueOf(str.charAt(0)));
            }
            else value += Integer.parseInt(String.valueOf(str));
        }
        if(value == 0 && x_value == 0)
            return "0";
        else if(value == 0)
            return x_value == 1 ? "x" : Integer.toString(x_value)+"x";
        else if(x_value == 0)
            return Integer.toString(value);
        else 
            return x_value == 1 ? "x + "+Integer.toString(value) : Integer.toString(x_value)+"x + "+Integer.toString(value);
    }
}

결과

테스트 케이스 통과, 채점에서 1, 2, 4, 9, 11 실패...

정답 풀이

class Solution {
    public String solution(String polynomial) {
        int x_value = 0;
        int value = 0;
        String a = "";
        String b = "";

        for(String str : polynomial.split(" ")){
            if(str.contains("x")) x_value += str.equals("x") ? 1 : Integer.parseInt(str.substring(0, str.length()-1));
            else if(!str.equals("+")) value += Integer.parseInt(str);
        }

        if(x_value > 1) a = x_value + "x";
        else if(x_value == 1) a = "x";
        
        if(value > 0) b = String.valueOf(value);

        if(x_value > 0){
            if(value > 0) return a + " + " + b;
            else return a;
        }
        else if( value > 0) return b;
        else return "0";
    }
}
  1. 공백으로 스플릿 후, x가 포함이고, 그냥 x면 1을 저장, 아니면 x전까지 자른 후, 앞 숫자 저장.
  2. 상수면 value에 더한다.
  3. String에 저장해주는데 x계수의 조건을 보고 넣어준다.
  4. 상수도 넣어준다.
  5. 조건문으로 x계수, 상수가 0이상일 때를 보고 리턴한다.
profile
ㅎㅎ

0개의 댓글