문제:

풀이방법:

 문자열처리를 해야하는 문제이므로 정규표현식을 사용했다. 정규표현식에서 '\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

문제링크:

https://programmers.co.kr/learn/courses/30/lessons/17682

'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

+ Recent posts