def solution(dartResult):
answer = 0
count = []
option = [i for i, x in enumerate(dartResult) if x in ['*', '#']]
bonus = [i for i, x in enumerate(dartResult) if x in ['S', 'D', 'T']]
for idx in bonus :
try :
temp = int(dartResult[idx-2:idx])
if dartResult[idx] == 'D' :
count.append(10 ** 2)
elif dartResult[idx] == 'T' :
count.append(10 ** 3)
else :
count.append(10)
except Exception as e:
# print("예외 상황 발생 : ", e)
if dartResult[idx] == 'D' :
count.append(int(dartResult[idx-1]) ** 2)
elif dartResult[idx] == 'T' :
count.append(int(dartResult[idx-1]) ** 3)
else :
count.append(int(dartResult[idx-1]))
for idx in option :
if dartResult[idx] == "*" :
temp = [i for i, x in enumerate(bonus) if x < idx]
count[temp.index(temp[-1])] *= 2
if len(temp) >= 2 :
count[temp.index(temp[-2])] *= 2
else :
temp = [i for i, x in enumerate(bonus) if x < idx]
count[temp.index(temp[-1])] *= (-1)
answer = sum(count)
return answer
처음에 어떻게 구현할 지 막막했는데 금방 생각해내서 다행이었다,,
사실 금방 생각해냈다곤 하지만 1시간 넘게 걸림 하하 하하 ㅎㅏ하하하
암튼 옵션 (*, #) 이랑 보너스 (S, D, T) 각각 어느 위치에 있는지 인덱스를 구해주고,
try-except 문으로 정수 10일 때랑 아닐 때랑 구분해서 풀어줌.
처음에 그냥 인덱스로만 왔다갔다하면서 숫자 계산해도 되지 않나 했는데
정수 한 자리일 때랑 두 자리일 때랑 구분을 어떻게 하지.. 아찔해져서 그냥 예외처리해줌.
그리고 마지막에 합산하기 전에 S, D, T 개수만큼 결과값이 따로 있는거니까
count 배열도 각 결과 나올 때마다 append 해서 따로따로 구분해서 저장해줌.
이후에 옵션 계산할 때 휙휙ㅎㄱ 편하게 하려고 ..!!!!
*, # 인덱스보다 작은 S, D, T 인덱스 전부 temp 에 저장하고,
옵션 * 은 맨끝 아니면 맨끝에서 첫 번째/두 번째 값에만 x2 해주면 됨.
옵션 # 도 마찬가지로 인덱스 잘 구해서 (-1) 곱해주면 끝 !!
'알고리즘' 카테고리의 다른 글
[프로그래머스 Lv2] 카펫 (Python) (0) | 2022.07.02 |
---|---|
[프로그래머스 Lv2 - 2019 KAKAO BLIND RECRUITMENT] 오픈채팅방 (Python) (0) | 2022.07.02 |
[프로그래머스 Lv1 - 2018 KAKAO BLIND RECRUITMENT] 비밀지도 (Python) (0) | 2022.07.01 |
[프로그래머스 Lv1 - 2019 카카오 개발자 겨울 인턴십] 크레인 인형뽑기 게임 (Python) (0) | 2022.06.30 |
[프로그래머스 Lv1 - 2020 카카오 인턴십] 키패드 누르기 (Python) (0) | 2022.06.30 |