100세까지 코딩
[프로그래머스] Lv0.다항식 더하기 본문
문제 설명
풀기 전 생각
- 항과 연산기호 사이에 항상 공백이 존재하고 + 기호만 사용하니 " + "로 string을 split 하기
- split 한 string 배열 중 x를 포함하면 x끼리 더하고 x를 포함하지 않으면 상수항끼리 더하기
class Solution {
public String solution(String polynomial) {
String answer = "";
int xSum = 0; // x값들의 합을 저장할 변수
int sum = 0; // 상수항들의 합을 저장할 변수
String[] spl = polynomial.split(" + "); // " + " 로 string 나누기
for(int i = 0; i < spl.length; i++){
if(spl[i].contains("x")){ // x를 포함하면 x를 없애기
spl[i] = spl[i].replace("x","");
if(spl[i].equals("")){ // 1x는 그냥 x로 표시되므로 x가 사라지면 빈값
xSum += 1; // 1만 더해주기
}
else{xSum += Integer.valueOf(spl[i]);} // x합에 더해주기
}else{
sum += Integer.valueOf(spl[i]); // x포함하지 않으면 그냥 상수합
}
}
if(xSum == 0 && sum == 0 ){ // xSum과 sum 둘다 0이면 빈값
answer = "";
}
else if(xSum == 0) { // xSum만 0이면 상수값만
answer = String.valueOf(sum);
}else if(sum == 0) { // sum만 0이면 x값만
answer = xSum + "x";
}else{ // xSum과 sum 둘다 0이 아니면 일반 다항식처럼 표현
answer = xSum + "x" + " + " + sum;
}
return answer;
}
}
오류 및 개선
- java.util.regex.PatternSyntaxException 발생
- 해당 에러는 메타문자로 들어가는 특수문자를 replace, split 등에 사용할 때 발생
- ex) +, *, (, ),?, [, ] 등은 \\을 넣어주기. "\\+"로 사용
- 1x + 3 같은 경우 x + 3으로 표시되어야 돼서 테스트케이스 3개 실패
- 조건마다 문자열에 더해주는 형태 & 삼항연산자가 더 가독성 있어보인다
최종
class Solution {
public String solution(String polynomial) {
String answer = "";
int xSum = 0; // x값들의 합을 저장할 변수
int sum = 0; // 상수항들의 합을 저장할 변수
String[] spl = polynomial.split(" \\+ "); // " + " 로 string 나누기
for(int i = 0; i < spl.length; i++){
if(spl[i].contains("x")){ // x를 포함하면 x를 없애기
spl[i] = spl[i].replace("x","");
if(spl[i].equals("")){ // 1x는 그냥 x로 표시되므로 x가 사라지면 빈값
xSum += 1; // 1만 더해주기
}
else{xSum += Integer.valueOf(spl[i]);} // x합에 더해주기
}else{
sum += Integer.valueOf(spl[i]); // x포함하지 않으면 그냥 상수합
}
}
if(xSum != 0){ // xSum이 0이 아닐때
answer += xSum == 1 ? "x" : xSum + "x"; // 1이면 x만 출력 아니면 xSum x 출력
}
if(sum != 0){ //sum이 0이 아닐때
answer += xSum != 0 ? " + " + sum : String.valueOf(sum);
// xSum이 0이 아니면 + 붙이고 0이면 바로 숫자만 출력
}
return answer;
}
}
String 클래스 메소드를 숙달해야겠다
'코딩테스트 > 자바' 카테고리의 다른 글
[프로그래머스] Lv0.최빈값 구하기 (0) | 2023.08.17 |
---|---|
[프로그래머스] Lv0.문자열 밀기 (0) | 2023.08.16 |
[프로그래머스] Lv0.안전지대 (0) | 2023.08.13 |
[프로그래머스] Lv0.연속된 수의 합 (0) | 2023.08.13 |
[프로그래머스] Lv0.분수의 덧셈 (0) | 2023.08.13 |