[プログラマー]ダーツゲーム-Java
15385 ワード
[プログラマー]ダーツ遊びに行く
ダーツゲーム
KakaoTalkの4番目の星!退屈な時?KakaoTalkゲームスター~
Game Star
KakaoTalkゲームスターは下半期にダーツゲームを新サービスとして発売する.ダーツゲームは、ボードに3回ダーツを投げ、点数の和で実力を競うゲームで、簡単に楽しめます.
入社したばかりの武智はコード力が認められ、ゲームの核心部分である採点ロジックを担当した.ダーツゲームの得点ロジックは以下の通りです.ダーツゲームは3回のチャンスがあります. の機会ごとに0点から10点を得ることができます. 点は単(S)、双(D)、三(T)領域が同時に存在し、各領域で当選した場合、スコアから1平方、2平方、3平方(スコア1、スコア2、スコア3)を算出する. オプションでは、スター賞()、阿差賞(#)、スター賞()の当選時に該当する点数と、それまでに獲得した点数がそれぞれ2倍になります.阿次賞(#)が当選した時、この点数は負数だった. スター賞()も最初の機会に登場することができます.このような状況で、最初のスター賞()の点数は2倍になった.(例4参照) スター賞()の効果は、他のスター賞()の効果と重なる可能性があります.そんな中、重なるスター賞(*)の点数は4倍.(例4参照) スター賞(*)の効果は「アチャ賞」(#)の効果と重なる可能性があります.この場合、重なったアッチャ賞(#)の点数は-2倍です.(例5参照) 単一(S)、二重(D)、三(T)の各スコアは1つ存在する. スター賞(*)、雅察賞(#)は1点ごとに1つしか存在しないし、存在しないかもしれない. 0~10の整数と、アルファベットS、D、T、*、および#からなる文字列を入力すると、合計スコアが返される関数を作成します.
「スコア|加算|オプション」からなる文字列3組.
例)1 S 2 D*3 T分は0から10の整数です. ボーナスはS、D、Tの1つです. オプティカル(光学式)ドライブは*または#のいずれかで、ない場合があります.
3回の機会で得られたスコアの合計の整数値を出力します.
例)37
問題の説明
ダーツゲーム
KakaoTalkの4番目の星!退屈な時?KakaoTalkゲームスター~
Game Star
KakaoTalkゲームスターは下半期にダーツゲームを新サービスとして発売する.ダーツゲームは、ボードに3回ダーツを投げ、点数の和で実力を競うゲームで、簡単に楽しめます.
入社したばかりの武智はコード力が認められ、ゲームの核心部分である採点ロジックを担当した.ダーツゲームの得点ロジックは以下の通りです.
入力フォーマット
「スコア|加算|オプション」からなる文字列3組.
例)1 S 2 D*3 T
出力フォーマット
3回の機会で得られたスコアの合計の整数値を出力します.
例)37
I/O例
マイコード
import java.util.Stack;
public class Solution {
public int solution(String dartResult) {
int answer = 0;
char[] resultArr = dartResult.toCharArray();
// 점수를 담음 score 변수 선언
String score = "";
Stack<Integer> stack = new Stack<Integer>();
// 임시 점수를 담을 tempScore 선언
int tempScore = 0;
// 이전 결과를 담을 tempResult 선언
char tempResult = 0;
// *이 연속으로 나오는지 확인할 count 변수 선언
int count = 0;
// 점수 계산 시작
for (int i = 0; i < resultArr.length; i++) {
// 숫자이면 실행
if (48 <= resultArr[i] && resultArr[i] <= 57) {
// 이전 결과가 *이나 #이 아니라면 answer에 바로 추가
if (65 < tempResult) {
answer += stack.peek();
}
// 점수 담기
score += resultArr[i];
// 문자이면 실행
} else if (65 <= resultArr[i] && resultArr[i] <= 90) {
// 문자 결과에 따라 다른 점수 입력
switch (resultArr[i]) {
case 83:
stack.push(Integer.parseInt(String.valueOf(score)));
break;
case 68:
stack.push((int) Math.pow(Integer.parseInt(String.valueOf(score)), 2));
break;
case 84:
stack.push((int) Math.pow(Integer.parseInt(String.valueOf(score)), 3));
break;
}
// 문자 결과가 끝나면 점수 초기화
score = "";
// 마지막 값이 문자이면 바로 answer에 값 추가
if (i == resultArr.length - 1) {
answer += stack.peek();
}
// * 이면 실행
} else if (resultArr[i] == 42) {
tempScore = stack.pop();
if (!stack.empty()) {
// *이 한 번인지 두 번인지 확인
answer += count > 0 ? stack.peek() * 2 : stack.peek();
}
stack.push(tempScore);
answer += tempScore * 2;
count++;
// # 이면 실행
} else if (resultArr[i] == 35) {
tempScore = stack.pop();
answer -= tempScore;
stack.push(-tempScore);
count--;
}
tempResult = resultArr[i];
}
return answer;
}
}
Reference
この問題について([プログラマー]ダーツゲーム-Java), 我々は、より多くの情報をここで見つけました https://velog.io/@seobob/프로그래머스-다트게임テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol