Algorithm Problem with JavaScript — 28day
다트 게임
카카오톡에 뜬 네 번째 별! 심심할 땐? 카카오톡 게임별~
카카오톡 게임별의 하반기 신규 서비스로 다트 게임을 출시하기로 했다. 다트 게임은 다트판에 다트를 세 차례 던져 그 점수의 합계로 실력을 겨루는 게임으로, 모두가 간단히 즐길 수 있다.
갓 입사한 무지는 코딩 실력을 인정받아 게임의 핵심 부분인 점수 계산 로직을 맡게 되었다. 다트 게임의 점수 계산 로직은 아래와 같다.
0~10의 정수와 문자 S, D, T, *, #로 구성된 문자열이 입력될 시 총점수를 반환하는 함수를 작성하라.
입력 형식
"점수|보너스|[옵션]"으로 이루어진 문자열 3세트.
예) 1S2D*3T
출력 형식
3번의 기회에서 얻은 점수 합계에 해당하는 정수값을 출력한다.
예) 37
입출력 예제
"점수|보너스|[옵션]" 방식으로 3번의 정보가 들어온다. 각각 점수, 보너스, 옵션 정보를 이용해서 점수를 업데이트해서 점수의 합계를 구하면 된다.
stack
과 sum
의 배열을 만들어서 스택 자료구조를 활용해서 문제를 해결한다. 입력으로 들어오는 정보(dartResult
)를 배열로 만든 후 반복문을 사용한다. 숫자가 들어오면 stack
에 숫자로 변환해 넣는다. 이전의 stack
에 숫자가 들어있다면 빼서 sum
배열로 이동시킨다. 10
에 대한 대응은 따로 해준다. ("1" 과 "0" 이 연속되어서 들어온다면 stack
에 10를 넣어준다.)
S
는 변화가 없음으로 따로 구현하지 않는다.
D
는 stack
에 있는 숫자를 제곱 해준다.
T
는 stack
에 있는 숫자를 세제곱 해준다.
*
는 stack
에 있는 숫자에 2를 곱해주고 sum
에 숫자가 있다면 배열 마지막 숫자를 빼내서 2를 곱해주고 다시 넣어준다.
#
는 stack
에 있는 숫자에 -1를 곱해준다.
마지막에는 stack
에 있는 숫자와 sum
배열의 숫자들을 모두 더 해준다.