오늘 포스팅 할 내용은 프로그래머스 문제 중 하나인 다트게임 문제를 풀어봤습니다.
1. 문제 설명
2. 문제 예시
3. 문제 풀이
내용을 잘 읽어보면 문제를 쉽게 풀 수 있습니다.
먼저 S, D, T는 제곱근을 이용해서 구해주면 됩니다.
스타상(*)과 아차상(#)은 중복이 될 수 있고 효과 중첩이 될 수 있다는 부분만 주의해주면 된다.
그리고 마지막으로 확인하면 되는 부분은 아차상(#)과 스타상(*)은 DartResult 맨 뒤에 나올 수 있다는 점
마지막에 나올 수 있기 때문에 마지막에 종료 표시를 위한 값("K")을 넣어주면 조금 더 쉽게 풀 수 있습니다.
코드는 아래와 같습니다.
import math
def solution(dartResult):
darts = []
starsNum = []
result = [0] * 3
dartStr = ""
chks = ""
rDartResult = ""
rDartResult = dartResult + "K"
for i in range(len(rDartResult)):
if rDartResult[i] == "S" or rDartResult[i] == "D" or rDartResult[i] == "T" or rDartResult[i] == "K":
darts.append(dartStr + rDartResult[i])
dartStr = ""
else:
dartStr += rDartResult[i]
for i in range(len(darts)):
chks = ""
for j in darts[i]:
if j == "S":
result[i] = int(chks)
result[i] = int(math.pow(result[i], 1))
elif j == "D":
result[i] = int(chks)
result[i] = int(math.pow(result[i], 2))
elif j == "T":
result[i] = int(chks)
result[i] = int(math.pow(result[i], 3))
elif j == "#" or j == "*":
if j == "#":
result[i-1] *= (-1)
else:
result[i-1] *= 2
result[i-2] *= 2
else:
chks += j
return sum(result)
우선 S, D, T, K로 구분을 해준다.
ex) 1S2D3T -> 1S, 2D, 3T
구분해준 뒤 S, D, T, #, *에 대한 조건들을 부여해주면 됩니다.
4. GitHub Code
위의 이미지 링크를 클릭하면 코드 확인이 가능합니다.
GitHub에도 동일하게 코드를 올려놨습니다.