반응형
programmers.co.kr/learn/courses/30/lessons/17682
코드를 금방 짰는데도 사소한 실수때문에 굉장히 오래 걸렸다.
아래 for 문 속 lst[i]가 #또는 *인 경우에 score[-1]에 적절한 조취를 취해주는 것인데
처음에 이걸 score[i-1]로 해서 계속 범위 오류가 발생했다.
i마다 스코어에 값이 매번 들어가는 것이 아닌데 i-1을 하면 분명 틀린 것이다. 이런 사소한 실수를 조심해야한다.
def solution(dartResult):
lst = []
sub = ''
for result in dartResult:
if result.isdigit():
sub += result
elif result.isalpha():
sub += result
lst.append(sub)
sub = ''
elif result in "#*":
lst.append(result)
score = []
for i in range(len(lst)):
if lst[i] == "#": # multiply previous score by -1
score[-1] *= -1
elif lst[i] == '*': # multiply previous two scores by 2
score[-1] *= 2
if i>=2:
score[-2] *= 2
else :
if lst[i][-1] == 'S':
point = int(lst[i][:-1])
elif lst[i][-1] == 'D':
point = int(lst[i][:-1])**2
else:
point = int(lst[i][:-1])**3
score.append(point)
return sum(score)
윗 부분과 아래 부분을 다음과 같이 조금 더 간결하게 작성할 수도 있다.
def solution(dartResult):
lst = ''
for w in dartResult:
lst += w
if w in "SDT#*":
lst += " "
lst = lst.split()
score = []
bonus = {'S':1,'D':2,'T':3}
for dart in lst:
if dart == "#":
score[-1] *= -1
elif dart == '*':
score[-1] *= 2
if len(score)>=2:
score[-2] *= 2
else :
point = int(dart[:-1])**bonus[dart[-1]]
score.append(point)
return sum(score)
댓글