알고리즘
[알고리즘] 프로그래머스 - [1차] 다트 게임
발등이 따뜻한 사람
2023. 12. 30. 19:22
문제
https://school.programmers.co.kr/learn/courses/30/lessons/17682
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
다트게임이 3회밖에 없다는것을 캐치했으면 금방 풀렸을텐데, 무한대로 가능하다고 생각하고 푸느라 *의 중첩을 어떤식으로 저장하고 관리해야할지에 대해 고민하다가 시간을 많이 뺏겼다.
보너스와 옵션 그리고 숫자를 각 횟수를 인덱스로 해서 배열에 담아서 계산했다.
10을 처리하는 부분에 있어서 매끄럽지 못했는데, 다른사람 풀이에서 신박한!! 풀이를 발견했다.
def solution(dartResult):
point = []
answer = []
dartResult = dartResult.replace('10','k')
point = ['10' if i == 'k' else i for i in dartResult]
print(point)
i = -1
sdt = ['S', 'D', 'T']
for j in point:
if j in sdt :
answer[i] = answer[i] ** (sdt.index(j)+1)
elif j == '*':
answer[i] = answer[i] * 2
if i != 0 :
answer[i - 1] = answer[i - 1] * 2
elif j == '#':
answer[i] = answer[i] * (-1)
else:
answer.append(int(j))
i += 1
return sum(answer)
4번째 5번째 줄,... 완전 신박하다
정답 코드
def solution(dartResult):
answer = 0
arr = list(dartResult)
bonus = []
option = ['','','']
number = []
for i in range(len(arr)):
a = arr[i]
if a =='x':
continue
if a == "S" or a=="D" or a=="T":
bonus.append(a)
elif a == "*" or a == "#":
option[len(number)-1] = a
else:
if arr[i+1] == '0':
a = 10
arr[i+1] = 'x'
number.append(int(a))
for i in range(3):
num = number[i]
if bonus[i] =='D':
num = num ** 2
elif bonus[i] == 'T':
num = num ** 3
if option[i] == "*":
num *= 2
elif option[i] == '#':
num *= -1
if i<2 and option[i+1] == "*":
num *= 2
answer += num
return answer