1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
//점수 계산
// 1. 다트게임은 총 세번의 기회로 구성되어 있음.
// 2, 각 기회마다 얻을 수 있는 점수는 0점에서 1점까지이다.
// Single(s) Double(D) Triple(T) 1제곱, 2제곱, 3제곱 점수^1 점수^2 점수^3
// 옵션으로 스타상(*) 아차상(#) 스타상 당첨시 점수 바로전에 얻을 점수를 2배로 한다
// 스타상 *의 효과는 다른 스타상 *의 효과와 중첩가능 4배가 된다.
// 아차상의 효과는 마이너스
// 스타상과 아차상 효과 중첩이 가능하다 -2배가 될수 있음.
// Singe, Doulbe, Triple 점수마다 하나씩 존재한다.
// 스타상 아차상 점수마다 둘 중 하나만 존재할 수 있음 존재하지 않을수도 있다.
//0~10의 정수와 문자 S,D,T,*,#으로 구성된 문자열이 입력될시 총 점수를 반환하는 함수를 작성하라...
function solution(dartResult) {
let answer = []; //점수/보너스/옵션
let count= 0;
for(let i=0;i<dartResult.length;i++){
let object = {};
//점수
if(!isNaN(dartResult[i])&&!isNaN(dartResult[i+1])&&Number(dartResult[i])<=9&&Number(dartResult[i+1])<=9){
//두자리수 10밖에없음
object.score = 10;
i += 2;
}
else if(Number(dartResult[i])<=9){
object.score = Number(dartResult[i]);
i += 1;
}
//보너스
object.bonus = dartResult[i];
//옵션
if(dartResult[i+1]==="*"||dartResult[i+1]==="#"){
i+=1;
object.option = dartResult[i];
answer.push(object);
}
else{
answer.push(object);
}
}
//아차상 점수는 해당 점수만 -1곱하고 스타상은 해당점수와 바로 전에 얻는 점수에 해당된다.
let sum = [];
for(let i=0;i<answer.length;i++){
let num = Number(answer[i].score);
//보너스 체크
if(answer[i].bonus==="S"){
}
else if(answer[i].bonus==="D"){
num = Math.pow(num,2);
}
else if(answer[i].bonus==="T"){
num = Math.pow(num,3);
}
//옵션체크
if(i===0&&answer[i].option==="*"){ //처음에 있을떄..
num *= 2;
sum.push(num);
}
else if(answer[i].option==="*"){
sum[sum.length-1] *= 2; //바로 전에 얻음 점수를 두배..
num *= 2;
sum.push(num);
}
else if(answer[i].option==="#"){ //아차상일떄..
num *= -1;
sum.push(num);
}
else{
sum.push(num);
}
}
return sum.reduce((acc,cur)=>acc+cur);
}
|
cs |
새롭게 알게된점
1. 알고리즘 문제풀이시에 나오는 입력값들을 원하는 결과에 나오기 쉽게 하도록 형식을 좋게 바꾸는 것이 중요하다.
문자열로 된 형식을 score bonus option 세가지 분류의 객체로 넣어서 정리했다.
'알고리즘구현능력 > 문제해결능력' 카테고리의 다른 글
[javascript] 프로그래머스 - 탑 (0) | 2019.12.09 |
---|---|
[javascript] 쇠막대기 | 프로그래머스 (0) | 2019.12.09 |
[javascript] 프로그래머스/실패율 (0) | 2019.11.27 |
[javascript] 1차 비밀지도 (0) | 2019.11.26 |
[javascript] 프로그래머스/예산 (0) | 2019.11.26 |