Open jeeyeonLIM opened 3 years ago
power(값, 승)
또는 **
을 활용해야 제곱승이 가능해진다.
import re
def solution(dartResult):
### 정규식 활용해서 원하는list로 만들어주기
p = re.compile("(\d+)([a-zA-Z])(\*|#)?")
scores = p.findall(dartResult)
#print(scores)
# [('1', 'S', ''), ('2', 'D', '*'), ('3', 'T', '')]
### 옵션에 해당하는 index 저장
# *는 해당 점수와 이전 점수를 2배로 만들고
# #은 해당 점수는 -가 된다.
star=[0]*3
sharp=[0]*3
for i,score in enumerate(scores):
if score[2] == "*":
if i==0 : # 첫번째 index일 경우 해당값만 해당함.
star[i]+=1
else : # 그외의 경우 해당값과 이전 index값이 해당.
star[i]+=1
star[i-1] +=1
elif score[2] == "#":
sharp[i] -= 1
### sharp 변환해주기
# sharp는 바로 전체 값에 곱해주려고 처리해주자. 처리 결과 아래와 같음.
# 1일 경우 x(+1)
# -1일 경우 x(-1)
# -2일 경우 x(-2)
for i in range(3):
if sharp[i] ==0:
sharp[i]=1
### 영역별 제곱수가 다르기 때문에 hash map 활용해 값을 지정해놓고
power_map = {'S':1, 'D':2, 'T':3}
### 이제 본격 계산 시작
answer=0
for i, score in enumerate(scores):
answer += ( (int(score[0])**(power_map[score[1]])) * (2**(star[i])) * sharp[i] )
## 파이썬에서는 ^이 제곱승이 아니고 **사용해야 함....
return answer
re.compile("(\d+)([a-zA-Z])(*|#)?")
(\d+)
([a-zA-Z])
(*|#)?
아래는 해시맵 만들어서 value값 끄집어내는 방법, 시행착오 겪으면서 뜯어본 과정을 담았다.
import re
def solution(dartResult): bonus = {'S' : 1, 'D' : 2, 'T' : 3} option = {'' : 1, '' : 2, # 2배가 됨. '#' : -1} # -1(즉 해당 숫자가 -가 됨) 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
### 다른 사람들의 풀이 ver2.
- 정규식 사용 X
```python
def solution(dartResult):
point = []
answer = []
dartResult = dartResult.replace('10','k')
point = ['10' if i == 'k' else i for i in dartResult]
print(point)
i = -1
sdt = ['S', 'D', 'T']
for j in point:
### 문자열 처리
if j in sdt :
answer[i] = answer[i] ** (sdt.index(j)+1)
elif j == '*':
answer[i] = answer[i] * 2
if i != 0 :
answer[i - 1] = answer[i - 1] * 2
elif j == '#':
answer[i] = answer[i] * (-1)
### 숫자라고 하면 append 해주기
### 숫자가 들어올 때마다 i+1 됨
else:
answer.append(int(j))
i += 1
return sum(answer)
다트 게임