Programmers 다섯 번째 문제
Updated:
다트 게임
public int solution(String dartResult) {
Pattern dartToken = Pattern.compile("\\d{1,2}\\D[\\*#]?");
Matcher dartMatcher = dartToken.matcher(dartResult);
List<Integer> pointList = new ArrayList<Integer>();
while (dartMatcher.find()) {
String pointGroup = dartMatcher.group();
int point = Integer.parseInt(pointGroup.replaceAll("[^0-9]", ""));
String bouns = pointGroup.replaceAll("[^(S|D|T)]", "");
String option = pointGroup.replaceAll("[0-9][S|D|T]", "");
if(!"S".equals(bouns)) {
point = (int) Math.pow(point, "D".equals(bouns) ? 2 : 3);
}
if("#".equals(option)) {
point *= -1;
}
if("*".equals(option)) {
point *= 2;
if(pointList.size() > 0) {
pointList.set(pointList.size()-1,
pointList.get(pointList.size()-1) * 2);
}
}
pointList.add(point);
}
int answer = 0;
for(int point : pointList) {
answer += point;
}
return answer;
}
- 정규식이 없으면 정말 if문의 향연일듯 하다. 실제로도 다른 사람들의 풀이를 봤는데 정말 if문 밖에 안보였다.
- 아직도 정규식에 대해서 잘 모르지만 그래도 이정도까진 정규식으로 풀 수 있어서 실력이 올라가는 기분이 든다.