Skip to content

Commit 526346b

Browse files
authored
Add files via upload
1 parent bee6323 commit 526346b

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

LEVEL2/Day3/dart.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
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])

0 commit comments

Comments
 (0)