문제:
풀이방법:
문자열처리를 해야하는 문제이므로 정규표현식을 사용했다. 정규표현식에서 '\d+'는 숫자를 의미하고, '\D+'를 의미하므로 문자열을 숫자와 숫자가 아닌 것들로 분할하는 작업을 먼저 했다. 문자들을 가져온 배열을 보면 * 과 #이 붙어있는 경우가 있을 수 있으므로 길이로 이를 파악하였다. 길이가 2면 특수문자가 붙어있고, 아니면 문자만 있는 것으로 판단했다. 그 이외에는 해당하는 명령어에 따라서 점수를 부여해주면 된다.
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
|
def solution(dartResult):
import re
answer=[]
regax=re.compile('\d+')
regax2=re.compile('\D+')
dartscore=regax.findall(dartResult)
dartplus=regax2.findall(dartResult)
for i in range(3):
if len(dartplus[i])==2:
if dartplus[i][0]=="S":
answer.append(int(dartscore[i]))
elif dartplus[i][0]=="D":
answer.append(int(dartscore[i])**2)
else:
answer.append(int(dartscore[i])**3)
if dartplus[i][1]=="*":
if i==0:
answer[-1]=answer[-1]*2
else:
answer[-1]=answer[-1]*2
answer[-2]=answer[-2]*2
else:
answer[-1]*=-1
else:
if dartplus[i][0]=="S":
answer.append(int(dartscore[i]))
elif dartplus[i][0]=="D":
answer.append(int(dartscore[i])**2)
else:
answer.append(int(dartscore[i])**3)
return sum(answer)
|
cs |
문제링크:
'Algorithm > Python' 카테고리의 다른 글
[BOJ]1075. 나누기 (0) | 2019.10.05 |
---|---|
[BOJ]1890. 점프 (0) | 2019.10.04 |
[Programmers]2018 Kakao.후보키 (0) | 2019.10.01 |
[Programmers]2018 Kakao.실패율 (0) | 2019.09.30 |
[Programmers]2018 Kakao. 오픈채팅방 (0) | 2019.09.29 |