본문 바로가기

Java/프로그래머스

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

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

 

 

 

 

시도 1)

 

class Solution {
    public String solution(String polynomial) {
        StringBuilder answer = new StringBuilder();
        int x0 = 0; // 상수항
        int x1 = 0; // 일차항
        
        polynomial = polynomial.replaceAll("\\s", ""); //공백제거
        String str[] = polynomial.split("\\+");
        
        for(int i = 0; i < str.length; i++) {
            String s = str[i];
            
            if(s.contains("x")) {
                if(s.length() == 1) {
                    x1 += 1;
                } else {
                    for(int j = 0; j < s.length(); j++) {
                        //숫자 부분을 추출하여 일차항에 더하기 
                        if(Character.isDigit(s.charAt(j))) {
                            x1 += (int)(s.charAt(j) - '0');
                        }
                    } 
                }
            } else {
                x0 += Integer.parseInt(s);
            }
        }
        
        
        //상수항과 일차항 모두 존재 
        if(x0!=0&&x1!=0)
        {
            answer.append(String.valueOf(x1));
            answer.append("x");
            answer.append(" + ");
            answer.append(String.valueOf(x0));
        }
        else if(x0==0)
        {
            answer.append(String.valueOf(x1));
            answer.append("x");
        }
        else if(x1==0)
        {
            answer.append(String.valueOf(x0));
        }
        
        return answer.toString();
    }
}

 

 

 

 

시도 2)

 

class Solution {
    public String solution(String polynomial) {
        StringBuilder answer = new StringBuilder();
        int x0 = 0; // 상수항
        int x1 = 0; // 일차항
        
        polynomial = polynomial.replaceAll("\\s", ""); //공백제거
        String str[] = polynomial.split("\\+");
        
        for(int i = 0; i < str.length; i++) {
            String s = str[i];
            
            if(s.contains("x")) {
                if(s.length() == 1) {
                    x1 += 1;
                } 
                else
                {
                    String sub[] = s.split("x");
                    
                    x1 +=Integer.parseInt(sub[0]);
                    
                } 
            } else {
                x0 += Integer.parseInt(s);
            }
        }
        
        
        //상수항과 일차항 모두 존재 
        if(x0!=0&&x1!=0)
        {
            answer.append(String.valueOf(x1));
            answer.append("x");
            answer.append(" + ");
            answer.append(String.valueOf(x0));
        }
        else if(x0==0)
        {
            answer.append(String.valueOf(x1));
            answer.append("x");
        }
        else if(x1==0)
        {
            answer.append(String.valueOf(x0));
        }
        
        return answer.toString();
    }
}

 

 

 

 

 

정답 

 

- 일차항의 계수가 1일때는 생략한다는 점을 고려 못함

class Solution {
    public String solution(String polynomial) {
        StringBuilder answer = new StringBuilder();
        int x0 = 0; // 상수항
        int x1 = 0; // 일차항
        
        polynomial = polynomial.replaceAll("\\s", ""); //공백제거
        String str[] = polynomial.split("\\+");
        
        for(int i = 0; i < str.length; i++) {
            String s = str[i];
            
            if(s.contains("x")) {
                if(s.length() == 1) {
                    x1 += 1;
                } 
                else
                {
                    String sub[] = s.split("x");
                    
                    x1 +=Integer.parseInt(sub[0]);
                    
                } 
            } else {
                x0 += Integer.parseInt(s);
            }
        }
        
        
        //상수항과 일차항 모두 존재 
        if(x0!=0&&x1!=0)
        {
            if(x1==1)
            {
                answer.append("x");
                answer.append(" + ");
                answer.append(String.valueOf(x0));
            }
            else
            {
                answer.append(String.valueOf(x1));
                answer.append("x");
                answer.append(" + ");
                answer.append(String.valueOf(x0));
            }
        }
        //일차항만 존재 
        else if(x0==0&&x1!=0)
        {
            if(x1==1)
            {
                answer.append("x");
            }
            else
            {
                answer.append(String.valueOf(x1));
                answer.append("x");
            }
        }
        //상수항만 존재 
        else if(x1==0&x0!=0)
        {
            answer.append(String.valueOf(x0));
        }
        
        return answer.toString();
    }
}

 

 

뿌듯

 

 

다른 사람의 풀이