[PROGRAMMERS]ダーツゲーム


💡 参考資料
ソース:[プログラマー、レベル1]ダーツゲーム(JAVA実現)
public int solution(String dartResult) {
	int answer = 0;
    
	int arr[] = new int[3];
	String temp = "";
	int idx = 0;
    
	for(int i = 0; i < dartResult.length(); i++){
		switch(dartResult.charAt(i)){
			case '*':
				arr[idx-1]*=2;
				if(idx >1) arr[idx-2]*=2;
				break;
			case '#':
				arr[idx-1]*=-1;
				break;
			case 'S':
				arr[idx] = (int)Math.pow(Integer.parseInt(temp),1);
				idx++;
				temp ="";
				break;
			case 'D':
				arr[idx] = (int)Math.pow(Integer.parseInt(temp),2);
				idx++;
				temp ="";
				break;
			case 'T':
				arr[idx] = (int)Math.pow(Integer.parseInt(temp),3);
				idx++;
				temp ="";
				break;
			default:
				temp+=String.valueOf(dartResult.charAt(i));
				break;
		}
	}
	for(int i =0;i<arr.length;i++){
		answer+=arr[i];
	}
	return answer;
}
  • ゲームは3回のチャンスがあるため、3回の点数を格納する配列を発表した.
  • ゲーム1回のスコアを保存するため、String変数tempを発表します.
  • dartResult文字列の長さを繰り返し、各文字を処理します.
  • からdefaultは整数をtempに格納する.
  • ボーナスは、作成したarr配列のボーナス平方に従って代入されます.
  • の後、インデックスに1(以下、1回単位)を加え、tempに空の値を加えて初期化します.
    🤔 オプションは次の値でも出なくてもいいのでボーナスのインデックスを付けて次に渡し、オプションが出たらインデックスを1つ増やして次に回してインデックス-1に乗じた値のようです.🤔
  • オプションがある場合、*はインデックスを次のものに変換しています.したがって、インデックス-1に2を乗算し、インデックスが1より大きい場合、つまり、以前に得られたスコアがある場合、インデックス-2に2を乗算します.
  • オプション#が選択されている場合は、インデックス-1に-1を乗じてマイナスになります.
  • 反復文が終了すると、新しい反復文に配列されたすべての値が加算されます.