[프로그래머스] 🎯 다트 게임 - [1차] 2018 카카오 블라인드 채용 / Python
글 작성자: 택시 운전사
반응형
🎯 다트 게임 문제 풀어보기
😃 나의 코드
import re
def solution(dartResult):
answer = 0
p = re.compile("(\d+)([a-zA-Z])(\*|#)?")
scores = p.findall(dartResult)
result = []
for idx, score in enumerate(scores):
point = score[0]
bonus = score[1]
option = score[2]
if bonus == 'S':
bonus = 1
elif bonus == 'D':
bonus = 2
elif bonus == 'T':
bonus = 3
if option == '*':
if idx == 0:
result.append(int(point)**bonus*2)
else:
result[-1] *= 2
result.append(int(point)**bonus*2)
elif option == '#':
result.append(int(point)**bonus*-1)
else: result.append(int(point)**bonus)
return sum(result)
정규 표현식(Regular Expression) Python
의 내장 Module인 re
를 이용하면 다트 게임은 쉽게 풀 수 있습니다. 점수 | 보너스 | [옵션]로 이루어진 시행들이 문자열이라는 한 덩이로 있기 때문에 정규 표현식을 이용해 이를 적절하게 나눠줍니다. 여기에 쓰인 정규 표현식은 다음과 같습니다.
p = re.compile("(\d+)([a-zA-Z])(\*|#)?")
(\d+)
는 1개 이상의 숫자에 대응합니다.
([a-zA-Z])
는 알파벳 하나에 대응합니다.
(\*|#)?
은 *
혹은(|
, OR
) #
에 대응합니다. 이 부분은 옵션 즉 있을 수도 있고 없을 수도 있기 때문에, *
와 #
은 ?
를 붙여서 이를 표현합니다.
각각은 소괄호(parenthesis)로 묶여 있습니다.
scores = p.findall(dartResult)
따라서 이 결과 값인 scores
는 [('1', 'S', ''), ('2', 'D', '*'), ('3', 'T', '')]
이런 형태가 됩니다.
이제 각 시행이 적절하게 분리되었으니 남은 건 점수의 계산이 남아있습니다. 점수 계산은 scores
배열의 앞부터 확인하면서 문제 설명에 나온 점수 계산법에 따라 짜면 큰 어려움은 없습니다. 이렇게 나온 각 시행별 최종 점수를 result
배열에 저장하고 모든 원소의 합을 반환하는 sum(result)
를 반환하면 문제가 마무리됩니다.
Written with StackEdit.
반응형
'Algorithm > Problem Solving' 카테고리의 다른 글
[프로그래머스] 👩💼 뉴스 클러스터링 - [1차] 2018 카카오 블라인드 채용 / Python / KAKAO BLIND RECRUITMENT (0) | 2019.02.14 |
---|---|
[프로그래머스] 👨💻 캐시 - [1차] 2018 카카오 블라인드 채용 / Python (0) | 2019.02.13 |
[프로그래머스] 🗺 비밀지도 - [1차] 2018 카카오 블라인드 채용 / Python (0) | 2019.02.12 |
🐥 2018 카카오 블라인드 채용 알고리즘 테스트 3차 Python 풀이 모음 / KAKAO BLIND RECRUITMENT (0) | 2019.02.09 |
🐥 2018 카카오 블라인드 채용 알고리즘 테스트 1차 Python 풀이 모음 / KAKAO BLIND RECRUITMENT (0) | 2019.02.09 |
댓글
이 글 공유하기
다른 글
-
[프로그래머스] 👩💼 뉴스 클러스터링 - [1차] 2018 카카오 블라인드 채용 / Python / KAKAO BLIND RECRUITMENT
[프로그래머스] 👩💼 뉴스 클러스터링 - [1차] 2018 카카오 블라인드 채용 / Python / KAKAO BLIND RECRUITMENT
2019.02.14 -
[프로그래머스] 👨💻 캐시 - [1차] 2018 카카오 블라인드 채용 / Python
[프로그래머스] 👨💻 캐시 - [1차] 2018 카카오 블라인드 채용 / Python
2019.02.13 -
[프로그래머스] 🗺 비밀지도 - [1차] 2018 카카오 블라인드 채용 / Python
[프로그래머스] 🗺 비밀지도 - [1차] 2018 카카오 블라인드 채용 / Python
2019.02.12 -
🐥 2018 카카오 블라인드 채용 알고리즘 테스트 3차 Python 풀이 모음 / KAKAO BLIND RECRUITMENT
🐥 2018 카카오 블라인드 채용 알고리즘 테스트 3차 Python 풀이 모음 / KAKAO BLIND RECRUITMENT
2019.02.09