第1ラウンドダーツ
점수 : 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;
}
}
逐字読み出し1)char:s.charAt(index)に変換
2)string逐字読み出し:s.substring(index,index+1)
1) Character.isDigit('c')
2) if(c>='0' && c<='9')
1) c - '0';
2) Character.getNumericValue(c)
繰り返し文(for,while)でcontinueの下のコードをスキップし、繰り返し文
Math.pow(底部、指数);
Reference
この問題について(第1ラウンドダーツ), 我々は、より多くの情報をここで見つけました https://velog.io/@ppnrn/1차-다트게임テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol