CODING TEST

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

우진하다 2023. 8. 1. 13:53

나의 풀이.

- polynomial 문자열을 "+" 기준으로 분리해 배열로 만들기
- "+"는 정규 표현식의 메타 문자이므로, 이 문자를 그대로 인식시키기 위해 이스케이프 문자를 추가
- x의 계수와 일반 숫자항을 담을 변수를 각각 0으로 선언하고 
- for each 문으로 polynomial 로 만든 배열을 순회

- "\\+" 기준으로 나누면 앞뒤로 공백이 있을 수 있어 trim() 으로 공백 제거
- foreach 문자열 변수 s가 "x" 를 포함할 때 -> x 를 ""로 교체하면 숫자만 남음
- 빈 값이면 1x이기 때문에 x의 계수 변수에 += 1, 아니면 += 남은 숫자

- x가 포함되지 않은 숫자라면 숫자항 변수에 += 숫자 
- StringBuilder를 하나 만들어서 x계수 변수가 1일 때는 그냥 x append
- x계수 변수 값이 != 0이 아니면 1 보다 큰 2부터 숫자가 있으니 xCnt append, x append
- 그리고 cnt가 0 이 아닐 떄
   - 앞에 x 항이 있을 때 (sb.length()로 판단) " + " 추가
   - 없으면 그냥 숫자만 추가
- 리턴 sb.toString()

class Solution {
    public String solution(String polynomial) {
        StringBuilder sb = new StringBuilder();
        int xCnt = 0;
        int cnt = 0;

        for (String s : polynomial.split("\\+")) {
            s = s.trim();
            if (s.contains("x")) {
                s = s.replace("x", "");
                if (s.equals("")) {
                    xCnt += 1;
                } else {
                    xCnt += Integer.parseInt(s);
                }
            } else {
                cnt += Integer.parseInt(s);
            }
        }

        if (xCnt == 1) {
            sb.append("x");
        } else if (xCnt != 0) {
            sb.append(xCnt).append("x");
        }
        if (cnt != 0) {
            if (sb.length() != 0) {
                sb.append(" + ");
            }
            sb.append(cnt);
        }

        return sb.toString();
    }
}