[ココ初]ダーツゲーム(プログラマー)
11398 ワード
問題の説明
![](https://s1.md5.ltd/image/4f26997204158b68aea6a54bbcbe544b.png)
に答える function solution(dartResult) {
// 각 영역 점수들을 담을 answer, 각 영역 점수이자 마지막 총합계산 sum
// 입력된 문자열 dartResult를 배열로 변환
let sum;
let answer = [];
const dartResultArr = dartResult.split('');
dartResultArr.map((point,idx)=>{
// 0~9일 경우와 10일 경우를 나눠 처리
// 문자열의 현재 인덱스와 다음 인덱스 위치 문자가 '1','0'일때 10
// 문자열의 현재 인덱스 바로 전 인덱스 위치 문자가 '1'이 아니면 0~9
// idx > 0일때 회차가 바뀜을 의미하므로
// 현재 sum을 answer에 담고 변경 회차 점수가 sum이 된다
// 그 외는 첫번째 회차이므로 현재 회차 점수가 sum이 된다
if(dartResultArr[idx] === '1' && dartResultArr[idx+1] === '0'){
if(idx>0){
answer.push(sum);
sum = 10;
}else{
sum = 10;
}
}else if(point.charCodeAt()>=48 && point.charCodeAt()<=57){
if(dartResultArr[idx-1] !== '1'){
if(idx>0){
answer.push(sum);
sum = Number(point);
}else{
sum = Number(point);
}
}
}
// S, D, T, #, * 각각 경우 점수 적용
// idx가 2또는 3일때(첫 회차에 나올경우) 해당 점수만 2배
// 그 외는 해당 점수와 이전 회차 점수 2배
if(point === 'S')
sum *= 1;
else if(point === 'D')
sum **= 2;
else if(point === 'T')
sum **= 3;
else if(point === '#')
sum *= -1;
else if(point === '*'){
if(idx===2||idx===3){
sum *= 2;
}else{
answer[answer.length-1] *= 2;
sum *= 2;
}
}
// 문자열의 끝이면 마지막 회차 점수 계산이 완료됐으므로 answer에 추가
if(idx === dartResult.length-1){
answer.push(sum);
}
})
// 총 점수 계산을 위해 sum을 0으로 초기화
sum = 0;
// 배열 answer의 각 원소를 돌며 sum에 더해 총합을 계산하고 최종 sum값 리턴
answer.map(num=>sum +=num);
return sum;
}
チェックポイント
function solution(dartResult) {
// 각 영역 점수들을 담을 answer, 각 영역 점수이자 마지막 총합계산 sum
// 입력된 문자열 dartResult를 배열로 변환
let sum;
let answer = [];
const dartResultArr = dartResult.split('');
dartResultArr.map((point,idx)=>{
// 0~9일 경우와 10일 경우를 나눠 처리
// 문자열의 현재 인덱스와 다음 인덱스 위치 문자가 '1','0'일때 10
// 문자열의 현재 인덱스 바로 전 인덱스 위치 문자가 '1'이 아니면 0~9
// idx > 0일때 회차가 바뀜을 의미하므로
// 현재 sum을 answer에 담고 변경 회차 점수가 sum이 된다
// 그 외는 첫번째 회차이므로 현재 회차 점수가 sum이 된다
if(dartResultArr[idx] === '1' && dartResultArr[idx+1] === '0'){
if(idx>0){
answer.push(sum);
sum = 10;
}else{
sum = 10;
}
}else if(point.charCodeAt()>=48 && point.charCodeAt()<=57){
if(dartResultArr[idx-1] !== '1'){
if(idx>0){
answer.push(sum);
sum = Number(point);
}else{
sum = Number(point);
}
}
}
// S, D, T, #, * 각각 경우 점수 적용
// idx가 2또는 3일때(첫 회차에 나올경우) 해당 점수만 2배
// 그 외는 해당 점수와 이전 회차 점수 2배
if(point === 'S')
sum *= 1;
else if(point === 'D')
sum **= 2;
else if(point === 'T')
sum **= 3;
else if(point === '#')
sum *= -1;
else if(point === '*'){
if(idx===2||idx===3){
sum *= 2;
}else{
answer[answer.length-1] *= 2;
sum *= 2;
}
}
// 문자열의 끝이면 마지막 회차 점수 계산이 완료됐으므로 answer에 추가
if(idx === dartResult.length-1){
answer.push(sum);
}
})
// 총 점수 계산을 위해 sum을 0으로 초기화
sum = 0;
// 배열 answer의 각 원소를 돌며 sum에 더해 총합을 계산하고 최종 sum값 리턴
answer.map(num=>sum +=num);
return sum;
}
Reference
この問題について([ココ初]ダーツゲーム(プログラマー)), 我々は、より多くの情報をここで見つけました https://velog.io/@vsnm25/카카오-1차다트-게임코딩테스트テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol