2018 카카오 블라인드 채용
def solution(dartResult):
scores = []
dartResult = dartResult.replace('10', 'k')
for x in dartResult:
if x.isdecimal():
scores.append(int(x))
elif x.isalpha():
if x == 'D':
scores[-1] **= 2
elif x == 'T':
scores[-1] **= 3
elif x == 'k':
scores.append(10)
else:
if x == '*':
scores[-2:] = [x*2 for x in scores[-2:]]
elif x == '#':
scores[-1] *= -1
return sum(scores)
주어진 조건을 잘 이해하면 풀 수 있었던 구현 문제입니다.
특히 신경 써야하는 조건은 점수가 0에서 10 사이의 정수라는 점입니다.
0부터 9까지 한 자리 수는 상관이 없지만 두 자리 수인 10은 별도로 따져야 하기 때문입니다.
첫 번째 풀이는 점수가 10인 경우를 따져주기 위한 인덱스 값이 필요해서 enumerate 함수를 사용했습니다.
하지만 코드가 길어지고 가독성이 떨어지는 문제가 발생했습니다.
개선된 방법을 생각하다가 문자열의 replace 함수가 떠올랐습니다.
어차피 입력 받는 값의 타입이 문자열이기 때문에 부분 문자열인 '10'을 'k'로 치환했습니다.
그 결과 개선된 코드로 모든 테스트 케이스를 통과했습니다. 👏🏻👏🏻
참고로 조건을 판별하기 위해 문자열의 isdecimal, isalpha 메서드를 사용했습니다.
'알고리즘' 카테고리의 다른 글
[SQL]프로그래머스 Lv.2 NULL 처리하기 (0) | 2023.08.05 |
---|---|
[파이썬]프로그래머스 Lv.1 완주하지못한선수 (0) | 2023.06.03 |
[파이썬]프로그래머스 Lv.1 소수만들기 (0) | 2023.06.02 |
[파이썬]프로그래머스 Lv.1 같은숫자는싫어 (0) | 2023.06.01 |
[파이썬]프로그래머스 Lv.1 달리기경주 (0) | 2023.05.31 |