https://programmers.co.kr/learn/courses/30/lessons/17682
코딩테스트 연습 - [1차] 다트 게임
programmers.co.kr

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
|
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(string dartResult) {
//계산한 다트 점수 카운트
int currentIdx = -1;
vector<int> sum;
for (int i = 0; i < dartResult.size(); i++)
{
//해당 문자열이 숫자인지 판별
if (isdigit(dartResult[i]))
{
//해당 문자열이 10일 경우의 예외처리
if (dartResult[i + 1] == '0')
{
sum.push_back(10);
i++;
}
//문자열을 정수로 변환 후 벡터에 삽입
else sum.push_back((int)dartResult[i] - 48);
currentIdx++;
//숫자 뒤의 문자열이 더블 , 트리플일 때 해당 인덱스의 값을 제곱
if (dartResult[i + 1] == 'D')sum[currentIdx] = pow(sum[currentIdx], 2);
if (dartResult[i + 1] == 'T')sum[currentIdx] = pow(sum[currentIdx], 3);
//더블 , 트리플 뒤의 문자열에 따라 스타상 , 아차상 점수 계산
if (isdigit(dartResult[i + 2]) == false)
{
switch (dartResult[i + 2])
{
//스타상일 경우 점수를 두배로 올린다.
case '*':
//다트를 한번만 던졌을 경우 해당 점수만 두배로
if (currentIdx == 0)sum[currentIdx] *= 2;
//그 이상 던졌을 경우 그 전에 던졌던 점수 + 해당 점수 두배로
else
{
sum[currentIdx - 1] *= 2;
sum[currentIdx] *= 2;
}
break;
//아차상일 경우 해당 점수를 음수로 바꾼다.
case '#':sum[currentIdx] *= -1;
break;
}
}
else continue;
}
}
//점수 계산이 끝나면 모든 점수를 합치고 리턴.
int answer = sum[0] + sum[1] + sum[2];
return answer;
}
|
'프로그래머스 - 내 풀이 > 프로그래머스 Lv1' 카테고리의 다른 글
[C#]프로그래머스/성격 유형 검사/해시 (0) | 2023.06.12 |
---|---|
프로그래머스 / 2019 KAKAO BLIND RECRUITMENT / 실패율 (0) | 2020.06.01 |
프로그래머스 / 2018 KAKAO BLIND RECRUITMENT / 비밀지도 (0) | 2020.05.29 |
프로그래머스 / 연습문제 / 예산 (1) | 2020.05.26 |
프로그래머스 / 연습문제 / 직사각형 별찍기 (0) | 2020.05.25 |