점수 : int 0~10
보너스 : s 1제곱, d 2제곱, t 3제곱 / 점수마다 하나씩 존재
옵션 : * # 존재 안할 수 있음
* 지금점수와 직전 점수 두배 / 처음에 * 이면 첫번째점수 두배 / 중첩되면 4배 / # 와 중첩되면 -2배
# 지금 점수 -1배
ex1) 1S 2D * 3T 1의 1제곱 + 2의 2제곱 지금점수와 직전점수 두배 + 3의 세제곱 = 37
ex2) 1D 2S # 10S 1의 2제곱 + 2의 1제곱 지금!점수 -1배 + 10의 1제곱 = 9
ex3) 1D 2S 0T 1의 2제곱 + 2의 1제곱 + 0의 세제곱 = 3
ex4) 1S * 2T * 3S 1의 1제곱 두배 + 2의 3제곱 지금점수와 직전점수 2배 + 3의 1제곱 = 23
ex5) 1D # 2S * 3S 1의 제곱 -1배 + 2의 1제곱 지금점수와 직전점수 2배 + 3의 1제곱 = 5
ex6) 1T 2D 3D # = -4
ex7) 1D 2S 3T * = 59
class Solution {
public int solution(String dartResult) {
int answer = 0;
int score = 0;
double [] arr = new double[dartResult.length()];
int cnt = 0;
for(int i=0;i<dartResult.length();i++){
int option = 0;
char c = dartResult.charAt(i);
//숫자 일 때
if(c>='0' && c<='9'){ //또는 isDigit()
if(score == 1 && c=='0') { //10일때
score = 10;
continue;
}
score = c - '0'; //char -> int 변환 // 또는 Character.getNumericValue()
continue;
}
//bonus 제곱
if(c=='S') arr[cnt] = Math.pow(score,1);
else if(c=='D') arr[cnt] = Math.pow(score,2);
else if(c=='T') arr[cnt] = Math.pow(score,3);
//option
else if(c=='*'){ //2배
option = 2;
cnt--;
}
else if(c=='#') { //-1배
option = -1;
cnt--;
}
//옵션 있을때
if(option!=0){
if(cnt!=0 && option==2){
arr[cnt-1] *= option;
}
arr[cnt] *= option; //첫번째에 옵션 있을때
}
cnt++;
}
for(double k : arr) answer+=k;
return answer;
}
}
- String을 한글자 씩 읽기
1) char로 변환하기 : s.charAt(index)
2) string으로 한글자씩 읽기 : s.substring(index, index+1)
char c;
- 정수인지 판단
1) Character.isDigit('c')
2) if(c>='0' && c<='9')
- char를 int로 변환
1) c - '0';
2) Character.getNumericValue(c)
- continue;
반복문(for, while)에서 continue 아래의 코드를 건너뛰고 다시 반복문 실행
- 제곱
Math.pow(밑, 지수);