https://school.programmers.co.kr/learn/courses/30/lessons/120863
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
이 문제 같은 경우에는 구현 자체가 어렵진 않았는데 예외 케이스를 생각할 때 많아서 생각보다 정답률이 높지 않은 것 같다.
1. 가장 먼저 입력값 polynomial에 대한 예외처리를 해준다.
1-1. 공백이 들어올 때는 무조건 0을 리턴하고, 숫자 한 개일 경우에는 무조건 그 숫자를 리턴한다.
2. +를 포함하고 있는 가장 일반적인 케이스는 Map 자료구조를 이용해 처리한다.
2-1. 이 때, key값은 x와 단순 정수 2개로 나누고, 계수는 value값을 이용해 계속 저장해나간다.
2-2. 만약 입력값이 "x"일 경우에는 계수 1을 붙여서 처리한다.
3. 그리고 전체 식을 다시 만들어준 후 결과값을 리턴한다.
3-1. 이 때 x의 최종계수가 1이 아닐 때에는 value값을 가지고와서 "x"를 붙여주고, 최종계수가 1이라면 그냥 "x"만 붙여준다.
3-2. x를 포함하는 식일 경우에는 항상 x를 먼저 나타내야하므로, cnt 변수를 통해 x를 포함하는 항과 정수를 나누어서 순서를 처리한다.
문제 및 예제
코드
import java.util.TreeMap;
import java.util.Map.Entry;
class Solution
{
public String solution(String polynomial)
{
if(polynomial.equals(" ") || polynomial.equals(""))
{
return "0";
}
else if(polynomial.length()==1)
{
return polynomial;
}
StringBuilder answer = new StringBuilder();
TreeMap<String, Integer> map = new TreeMap<String, Integer>();
int cnt = 0;
String[] value = polynomial.split("\\+");
for(String s : value)
{
s = s.trim();
int temp = -1;
if(s.contains("x"))
{
if(s.length()==1)
{
s = "1x";
}
temp = Integer.parseInt(s.replace("x",""));
if(map.containsKey("-1"))
{
map.put("-1", map.get("-1") + temp);
}
else
{
map.put("-1", temp);
}
}
else
{
temp = Integer.parseInt(s);
if(map.containsKey("1"))
{
map.put("1", map.get("1") + temp);
}
else
{
map.put("1", temp);
}
}
}
for(Entry<String, Integer> e : map.entrySet())
{
if(e.getKey().equals("-1"))
{
if(e.getValue()!=1)
{
answer.append(e.getValue());
}
answer.append("x");
cnt++;
}
else
{
if(cnt!=0)
{
answer.append(" + ");
}
answer.append(e.getValue());
}
}
return answer.toString();
}
}
'[ 다먹살 ] > - Coding' 카테고리의 다른 글
[프로그래머스] 레벨0 연속된 수의 합 (0) | 2022.10.25 |
---|---|
[프로그래머스] 레벨0 저주의 숫자3 (0) | 2022.10.25 |
[프로그래머스] 레벨0 OX퀴즈 (0) | 2022.10.24 |
[프로그래머스] 레벨0 안전지대 (0) | 2022.10.24 |
[프로그래머스] 레벨0 분수의 덧셈 (0) | 2022.10.20 |
댓글