-
[프로그래머스 Python] 다트게임 (from kakao)Algorithm/1일 1코테 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
반응형'Algorithm > 1일 1코테' 카테고리의 다른 글
[🤷♀️ 프로그래머스 Python] 실패율 (from kakao) (0) 2020.10.17 [프로그래머스 Python] 캐시 (from kakao) (0) 2020.10.16 [프로그래머스 Python] 비밀지도(from kakao) (0) 2020.10.13 [백준 Python] 1094 막대기 (0) 2020.09.27 [🤷♀️ 프로그래머스 Python] 체육복 (0) 2020.09.23