def solution(dartResult):
for i in range (2, len(dartResult)):
if dartResult[i].isdigit():
x = i
break
First = dartResult[0: x]
for i in range (x+2, len(dartResult)):
if dartResult[i].isdigit():
y = i
break
Second = dartResult[x:y]
Third = dartResult[y:]
newlist = (First, Second, Third)
scores = []
for word in newlist:
for i in range(1,len(word)):
if word[i].isdigit() == False:
sc = int(word[0:i])
break
if 'S' in word:
sc =sc**1
elif 'D' in word:
sc =sc**2
elif 'T' in word:
sc =sc**3
scores.append(sc)
if '*' in First:
scores[0] = scores[0]*2
if '#' in First:
scores[0] = scores[0]*(-1)
if '*' in Second:
scores[0] = scores[0]*2
scores[1] = scores[1]*2
if '#' in Second:
scores[1] = scores[1]*(-1)
if '*' in Third:
scores[1] = scores[1]*2
scores[2] = scores[2]*2
if '#' in Third:
scores[2] = scores[2]*(-1)
return sum(scores)
노가다 코드.
1~3차시에 해당하는 것을 각각 구한다.
뒤에 반드시 하나의 숫자가아닌 문자가 오고 10점까지 있으니까 인덱스 2부터 검사해서 숫자가 나오면 그 전까지 슬라이스 하는 방식.
각 차시에 해당하는 문자열을 나눠서 점수부분을 구해주고, S,D,T에 따라 제곱해주기.
옵션 사항인 '*'과 '#'구해주기
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
정규표현식 활용 !!