File tree Expand file tree Collapse file tree 1 file changed +42
-0
lines changed
Expand file tree Collapse file tree 1 file changed +42
-0
lines changed Original file line number Diff line number Diff line change 1+ import re
2+
3+ def solution (dartResult ):
4+ # 변환에 대한 리스트 변수 선언
5+ result = []
6+
7+ # 문자 변환에 필요한 딕셔너리
8+ converter = {'S' :'**1' , 'D' :'**2' , 'T' :'**3' , '#' :'*-1' }
9+
10+ # 1. 입력 문자열 분할
11+ # #이나 *은 있을수도 있고 없을수도 있기 때문에 ?붙임
12+ # g는 그룹을 의미 -> [SDT][*#]?를 괄호로 묶어줌
13+ # 그룹별로 띄어쓰기가 되면서 분할됨
14+ # 분할된 것을 split을 통하여 list로 반환
15+ divisor = re .sub ('([SDT][*#]?)' , '\g<1> ' , dartResult ).split ()
16+
17+ # 2. 분할된 문자열을 문제의 요구사항에 맞춰서 변환
18+ # divisor는 리스트들을 각 원소는 divide를 의미
19+ # 각 원소의 글자단위로 접근을 하면서 정수인지 SDT * #인지 비교를 해줘야하기 때문에 해당하는 글자까지 접근 하기위해 이중 for문
20+ # 1S2D*3T라는 divisor에 1S 2D* 3T라는 divide로 나누고 이 divide를 글자단위로 분리
21+ # 1S 2D* 3T라는 것을 1**1, 2**2*2 3**3형태로 바꿔주기 위해 replace 메소드 사용
22+ # SDT #은 변환
23+ # 딕셔너리에 get 메소드 사용 1번째 params는 key값이고 key값이 없을 경우 2번째 params 반환
24+ # 스타상은 바로 전에 얻은 점수를 2배해야하는 조건 추가
25+ # 2배하기 전에 그 전에 앞에 값이 있는지 없는지 확인 있으면 *2문자 추가
26+ # result[-1] = result[-1][:-1] + '*2' 는 마지막 +문자를 빼고 *2+를 넣어준다
27+ # 그리고 + 문자도 추가
28+ for divide in divisor :
29+ for words in divide :
30+ divide = divide .replace (words , converter .get (words , words ))
31+ if divide [- 1 ] == '*' :
32+ divide += '2'
33+ if result :
34+ result [- 1 ] = result [- 1 ][:- 1 ] + '*2+'
35+ divide += '+'
36+ result .append (divide )
37+
38+ # 3. 변환된 문자열의 연산값 변환
39+ # 문자열 자체 값을 연산하기 위해 eval() 사용
40+ # 문자열을 연산하기 위해 result에 값들을 문자열로 join
41+ # 마지막 문자열이 +인경우를 생략하가위해 [:-1] 추가
42+ return eval ('' .join (result )[:- 1 ])
You can’t perform that action at this time.
0 commit comments