Algorithm/1일 1코테
[프로그래머스 Python] 다트게임 (from kakao)
대인보우
2020. 10. 14. 16:36
반응형
문제
programmers.co.kr/learn/courses/30/lessons/17682
코딩테스트 연습 - [1차] 다트 게임
programmers.co.kr
나의 풀이
def solution(dartResult):
dart = list(dartResult) #한자리씩 list로 생성
score = [] #변환한 거 저장해줄 리스트
# 문자열 -> 리스트 처리
for i in range(len(dart)):
if dart[i] == '1' and dart[i+1] == '0': # 10 처리
score.append('10')
elif dart[i] == '0' and dart[i-1] == '1': # 겹치면 pass
continue
else:
score.append(dart[i]) # 나머지는 그냥 하나씩 담기
# 다트게임 시작
a = [] # 결과 담을 list
for s in score:
if s.isdigit(): #숫자면 num
num = int(s)
elif s.isalpha(): #숫자 아니면 다트 게임 계산
if s == 'S':
num = num ** 1
a.append(num) #각각 저장해줌
elif s == 'D':
num = num ** 2
a.append(num)
elif s == 'T':
num = num ** 3
a.append(num)
# *, # 처리하기
if s == '*': # *이면
if len(a) >= 2: #리스트 2개 이상일 땐 전의 값도 계산해줘야함
a[-1] = a[-1] * 2
a[-2] = a[-2] * 2
else: #리스트가 하나값이면 하나만 처리
a[-1] = a[-1] * 2
if s == '#': # #이면 -1
a[-1] = a[-1] * (-1)
return sum(a) # 총합 return
다른사람 풀이
import re
def solution(dartResult):
bonus = {'S' : 1, 'D' : 2, 'T' : 3}
option = {'' : 1, '*' : 2, '#' : -1}
p = re.compile('(\d+)([SDT])([*#]?)') #정규표현식 컴파일
dart = p.findall(dartResult)
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]]
answer = sum(dart)
return answer
반응형