한칸씩읽을건데 10을 어떻게 처리하지?
'*,#'은 있을수도 없을수도 있는데 어떻게 처리하지?
=> 답은 문자열 정규식이었다.
Pattern, Matcher는 사용하기전 import 따로 필수
☆바로가기 - 벨로그 자바 Pattern Matcher 정리 글☆
str1 = "";
str2 = null;
str3 = " ";
str1.isEmpty(); // ""은 true
str2.isEmpty(); // null은 true
str3.isEmpty(); // " "은 false
사용할 때도, Math.pow(10, 2); 이런식으로 꺼내서 사용해야함
쉬운거지만 확실하게 알아놓기
switch(){
case 'a': ....;
break;
case 'b': ....;
break;
default: break;
}
모두 소문자인 것 기억!!!
import java.util.*;
import java.lang.Math;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
class Solution {
public int solution(String dartResult) {
int answer = 0;
int index = 0;
int[] dartAnswer = {};
Pattern p = Pattern.compile("([0-9]+)([SDT])([*#]?)");
Matcher m = p.matcher(dartResult);
dartAnswer = new int[m.groupCount()];
while(m.find()){
int num = Integer.valueOf(m.group(1));
switch(m.group(2).charAt(0)){
case 'S': num = (int)Math.pow(num, 1);
break;
case 'D': num = (int)Math.pow(num, 2);
break;
case 'T': num = (int)Math.pow(num, 3);
break;
default: break;
}
dartAnswer[index] = num;
// System.out.println("@"+m.group(3)+"@");
if(m.group(3).isEmpty() == false){ //string이 null 인지 판별하는 함수
switch(m.group(3).charAt(0)){
case '*': if(index > 0){
dartAnswer[index-1] *= 2;
dartAnswer[index] *= 2;
}
else
dartAnswer[index] *= 2;
break;
case '#': dartAnswer[index] *= -1;
break;
default: break;
}
}
index++;
}
for(int i : dartAnswer){
answer += i;
}
return answer;
}
}