728x90
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
간단한 구현 문제다.
점수 계산 로직을 작성하는 건 쉬웠지만, 던진 다트의 점수의 정보가 있는 문자열을 던진 다트별로 구분하는 로직 만드는 게 은근 까다로웠다.
특히, 점수가 0~9인 경우 isdigit() 함수로 쉽게 구분할 수 있었지만, 만약 10이 들어가는 경우, 1, 0 이렇게 점수가 나뉘어 버려서 이 부분 로직을 만드는게 까다로웠다.
구분하는 로직을 만든 후, 구분된 리스트 ["1S", "2D*", "3T]를 [["1", "S"], ["2", "D", "*"], ["3", "T"]] 꼴로 바꿔줬다.
그리고 계산 로직을 넣어주면 답을 구할 수 있다.
def solution(dartResult):
darts = []
j = 0
for i in range(2, len(dartResult)):
if dartResult[i].isdigit():
if dartResult[j:i] == '1':
continue
darts.append(dartResult[j:i])
j = i
darts.append(dartResult[j:])
total = 0
darts = [list(dart) for dart in darts]
for i in range(3):
if darts[i][0] == '1' and darts[i][1] == '0':
darts[i] = ['10', darts[i][2]]
score = [0, 0, 0]
# 계산식 시작
for i in range(3):
if darts[i][1] == 'S':
score[i] += int(darts[i][0])
elif darts[i][1] == 'D':
score[i] += int(darts[i][0]) ** 2
else:
score[i] += int(darts[i][0]) ** 3
if len(darts[i]) == 3: # *나 #가 있는 경우
if darts[i][2] == '*': # *(스타상)
if i == 0:
score[i] *= 2
else:
score[i] *= 2
score[i-1] *= 2
else: # #(아차상)
score[i] *= -1
return sum(score)
728x90