[アルゴリズムの問題][1ラウンド目]ダーツゲーム
質問する
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つしか存在しないし、存在しないかもしれない.
0~10の整数と、アルファベットS、D、T、および#からなる文字列を入力すると、合計スコアが返される関数を作成します.
入力フォーマット
「スコア|加算|オプション」からなる文字列3組.
例)1 S 2 D*3 T
スコアは0~10の整数です.
ボーナスはS、D、Tの一つです.
破線は*または#のいずれかで、ない可能性があります.
出力フォーマット
3回の機会で得られたスコアの合計の整数値を出力します.
例)37
コード#コード#
function solution(dartResult) {
let index = 0;
let round = 0;
let score = [];
while (dartResult[index]) {
score[round] = Number(dartResult[index]);
index++;
if (dartResult[index] === '0') {
score[round] = 10;
index++;
}
if (dartResult[index] === 'D') score[round] = Math.pow(score[round], 2);
if (dartResult[index] === 'T') score[round] = Math.pow(score[round], 3);
index++;
if (dartResult[index] === '*' || dartResult[index] === '#') {
if (dartResult[index] === '*') {
score[round] *= 2;
score[round - 1] *= 2;
}
if (dartResult[index] === '#') score[round] *= -1;
index++;
}
round++;
}
return score[0] + score[1] + score[2];
}
に答える
while文で逐字チェックしてインデックスを追加
出典:プログラマーコードテスト練習、https://programmers.co.kr/learn/challenges
Reference
この問題について([アルゴリズムの問題][1ラウンド目]ダーツゲーム), 我々は、より多くの情報をここで見つけました https://velog.io/@idhyo0o/Algorithm-Problem-1차-다트-게임テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol