다른 사람의 풀이 1
import re
def solution(dartResult):
bonus = {'S' : 1, 'D' : 2, 'T' : 3}
option = {'' : 1, '*' : 2, '#' : -1}
# \d는 숫자를 의미, [a-zA-Z]는 알파벳을 의미, ([*|#]?)는 특수 문자를 의미한다.
#'?'가 Quantifier 중의 하나인데,
# 0이나 1을 나타내는 연산자이다. 해당 특수문자가 없는 경우 ""을 반환하고, 해당 특수문자가 있으면 한 개만 있을 때만 돌려달라는 의미
# 괄호 1개가 튜플의 1개의 요소가 된다.
# 즉 p1은 소괄호가 2개이므로 요소가 2개가 나오고, p2는 소괄호가 3개 이므로 요소가 3개가 나온다.
p = re.compile('(\d+)+([SDT])+([*#]?)')
dart = p.findall(dartResult)
# print(dart)
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]]
# print(dart)
answer = sum(dart)
return answer
다른 사람의 풀이2
def solution(dartResult):
scores = {"S": 1, "D": 2, "T": 3}
tmp = ''
list = []
for c in dartResult:
if c in scores.keys():
list.append(int(tmp) ** scores[c])
tmp = '' #tmp에 저장되어 있던 '숫자 문자열'을 초기화 시킨다.
elif c == "#":
list[-1] = list[-1] * -1
elif c == "*":
list[-1] = list[-1] * 2
if len(list) >= 2: #코드지점은 c=="*" 인데, len(stack)가 2이상이므로 두번째 발견한 별표*라는 의미이다.
list[-2] = list[-2] * 2
else:
tmp += c
#c가 숫자인 경우에는 tmp에 저장된다.
return sum(list)
'프로그래머스(파이썬) > LV.1(파이썬)' 카테고리의 다른 글
가장 가까운 글자→ 다중 index를 이용★★ (0) | 2022.12.20 |
---|---|
완주하지 못한 선수→ Hash 또는 Counter함수 (0) | 2022.12.19 |
체육복→ 앞에 확인하고, 뒤에 확인하고, set의 차집합(-)★ (0) | 2022.12.18 |
로또의 최고순위와 최저순위★★ → "그외"처리 + in 연산자 +인덱스==등수 (0) | 2022.12.18 |
푸드 파이트 대회→deque() + while문 + cnt-=1→소모개념★★+ 우측에서 좌측으로 (0) | 2022.12.18 |