코드1 : 10을 다른 숫자나 문자로 치환 후 진행
# solution2(코드2)보다 0.01초 정도 빠르다
def solution1(dartResult):
bonus = {'S': 1, 'D': 2, 'T': 3}
options = ['*', '#']
answer = []
dartResult = dartResult.replace('10', 't')
for i in range(len(dartResult)):
if dartResult[i] in bonus:
if dartResult[i - 1] == 't':
answer.append(10 ** bonus[dartResult[i]])
else:
answer.append(int(dartResult[i - 1]) ** bonus[dartResult[i]])
if dartResult[i] in options:
if dartResult[i] == '*':
if len(answer) == 1:
answer[-1] *= 2
else:
answer[-1] *= 2
answer[-2] *= 2
else:
answer[-1] *= (-1)
res = 0
for ans in answer:
res += ans
return res
코드2 : 10을 그대로 두고 진행
def solution2(dartResult):
bonus = {'S': 1, 'D': 2, 'T': 3}
options = ['*', '#']
numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
answer = []
for i in range(len(dartResult)):
if dartResult[i] in bonus:
if dartResult[i - 2:i] == '10':
answer.append(10 ** bonus[dartResult[i]])
elif dartResult[i-1] in numbers:
answer.append(int(dartResult[i - 1]) ** bonus[dartResult[i]])
if dartResult[i] in options:
if dartResult[i] == '*':
if len(answer) == 1:
answer[-1] *= 2
else:
answer[-1] *= 2
answer[-2] *= 2
else:
answer[-1] *= (-1)
print(answer)
res = 0
for ans in answer:
res += ans
return res
주의해야하는 점
1. ** 문제점 : TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'
** 해결책 : dartResult[i - 1]가 str이므로 int ** int를 해줘야함
2. ** 문제점 : '10'을 '0'으로 바꾸니까 정답이 나오지 않음
** 해결책 : 문제를 잘 읽자 -> 점수는 0에서 10 사이의 정수이다.
'알고리즘' 카테고리의 다른 글
[programmers] 뉴스 클러스터링 (0) | 2020.08.31 |
---|---|
[programmers] 튜플 (0) | 2020.08.31 |
[baekjoon] 14888. 연산자 끼워넣기 (0) | 2020.08.19 |
[baekjoon] 14889. 스타트와 링크 (0) | 2020.08.18 |
[baekjoon] 13458. 시험감독 (0) | 2020.08.18 |