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

Yunki Kim·2023년 1월 6일
0

프로그래머스

목록 보기
80/101
post-thumbnail

문제


링크


코드

풀이 1.

class Solution {
    public String solution(String polynomial) {
        String[] stringArray = polynomial.split(" ");
        int sumX = 0;
        int sum = 0;
        for (String string : stringArray) {
            if (string.equals("+")) continue;
            if (string.contains("x")) {
                String temp = string.replace("x", "");
                if (temp.equals("")) sumX++;
                else sumX += Integer.parseInt(temp);

            } else sum += Integer.parseInt(string);
        }

	@@ -19,7 +15,6 @@ public String solution(String polynomial) {
                    : sb.append(sumX).append("x").append(" + ").append(sum).toString();
        }
        if (sumX != 0) return sumX == 1 ? sb.append("x").toString() : sb.append(sumX).append("x").toString();

        return sum != 0 ? sb.append(sum).toString() : "0";
    }
}

풀이 2.

class Solution {
    public String solution(String polynomial) {
        int sumX = 0;
        int sum = 0;
        for (String string : polynomial.split(" ")) {
            if (string.equals("+")) continue;
            if (string.contains("x")) {
                sumX += string.equals("x") ? 1 : Integer.parseInt(string.replaceAll("x", ""));
            } else sum += Integer.parseInt(string);
        }

        StringBuilder sb = new StringBuilder();
        if (sumX != 0 && sum != 0) {
            return sumX == 1 ? sb.append("x").append(" + ").append(sum).toString()
                    : sb.append(sumX).append("x").append(" + ").append(sum).toString();
        }
        if (sumX != 0) return sumX == 1 ? sb.append("x").toString() : sb.append(sumX).append("x").toString();
        return sum != 0 ? sb.append(sum).toString() : "0";
    }
}

리뷰

풀이 1과 풀이 2 풀이는 동일하고 제출 후에 구현코드가 좀 복잡한듯해서 코드 정리를 해보았다.

상당히 애먹었던 문제이다 😂
다항식을 계산하기 위해서는 x값이 붙어있는 변수항과 상수항을 분리해야한다.
일단 처음에 split을 통해 공백을 제거하고 연산자와 피연산자로 구성된 배열로 만들어서 피연산자인 경우 변수항인지 확인하기 위해 contains()를 사용하였다.

그리고 x의 차수가 1인 경우에는 생략되므로 문자열이 x로만 구성되어있으면 변수항의 계수에 1을 더해주고
앞에 계수가 붙어있으면 뒤에 x를 제거하여 계수값만 더해주도록 하였다.

x가 붙어있지 않으면 상수항이므로 따로 더하도록 하였다.

출력방식은 문자열 결합을 사용하면 삼항연산자를 통해 조금 간단하게 표현할 수 있을 것 같은데 문자열 결합의 경우 성능이 떨어지기도하고 뭔가.. 손이 안갔다 🤣

변수항의 차수가 1인 경우 생략되어야 하므로 sumX의 값이 1인 경우에는 차수가 붙지 않도록 하였다.

문제에서 주어진 테스트 케이스로는 문제의 성공 여부를 확인하기 힘들다.
그래서 반례를 생각하는 시간이 많이 걸렸던 것 같다.

  1. 변수항이 없는가
  2. 상수항이 없는가
  3. 변수항이 있는데 차수가 1인가

이러한 방식으로 접근한 뒤 변수항과 상수항의 차수에 따라 출력문을 구현하면 될 것이다.

0개의 댓글