-
Notifications
You must be signed in to change notification settings - Fork 1
/
다트게임.py
57 lines (51 loc) · 1.69 KB
/
다트게임.py
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
'''
* 🙆♂️ Created by wwlee94 on 2020.04.22
https://programmers.co.kr/learn/courses/30/lessons/17682
- 문제 풀이 방법 -
1. '2. 이전 풀이' 방법대로 문제를 해결하기 했으나 가독성이 매우 떨어짐
2. '1. 개선 풀이'에서 정규식을 사용하여 보다 가독성 있는 코드로 변경
* 문제에서 주어지는 문자들을 각각의 점수로 변경한 뒤
* 정규식으로 연산 문단을 찾아 값을 대입
'''
# 1. 개선 풀이
import re
def solution(dartResult):
bonus = {'S' : 1, 'D' : 2, 'T' : 3}
option = {'' : 1, '*' : 2, '#' : -1}
p = re.compile('(\d+)([SDT])([*#]?)')
dart = p.findall(dartResult)
for i in range(len(dart)):
if dart[i][2] == '*' and i > 0:
dart[i-1] *= 2
dart[i] = int(dart[i][0]) ** bonus[dart[i][1]] * option[dart[i][2]]
answer = sum(dart)
return answer
# 2. 이전 풀이
# def solution(dartResult):
# answer = []
# cur = 0
# count = 0
# dartResult = dartResult.replace('10', 'x')
# for i in dartResult:
# # 숫자
# if i.isdigit():
# cur = int(i)
# elif i == 'x':
# cur = 10
# # 보너스
# elif i in ['S','D','T']:
# if i == 'D':
# cur = cur**2
# elif i == 'T':
# cur = cur**3
# answer.append(cur)
# count += 1
# # 옵션
# elif i in ['*', '#']:
# if i == '*':
# if count != 1:
# answer[count-2] *= 2
# answer[count-1] *= 2
# elif i == '#':
# answer[count-1] *= -1
# return sum(answer)