문제
알고리즘
- 계산하기 편하게 하기 위해 "10"을 "A"로 변환한다.
- 'S', 'D', 'T'를 리스트에 넣어 각 인덱스 + 1 만큼 제곱할 수 있게 설계한다.
- 초기 시작 값을 설정하는데 'A'라면 10으로 초기화하고 그 외 문자라면 int()로 변환하여 초기화한다.
- 반복문을 통해 문자를 확인한다.
- 문자가 sdt에 포함되어 있다면 현재 수를 인덱스 +1만큼 제곱한다.
- 문자가 "*"이라면 현재 수를 두배 해주고 이전에 수가 있다면 이전 수도 두배 해준다.
- 문자가 "#"라면 현재 수를 -해준다.
- 그 외 문자라면 숫자인 것으로 게임 한판이 끝난 것이다.
- 총점수를 answer에 추가해주고 다음 게임의 초기 시작 값으로 초기화해준다.
- 반복문이 끝나고 마지막 게임의 점수를 입력해준다.
- 총 게임의 점수를 더해줘 출력한다.
코드
def solution(dartResult):
answer = []
dartResult = dartResult.replace("10", "A") # 계산하기 편하게 하기 위해 10을 A로 변환
sdt = ['S', 'D', 'T'] # S: 1제곱, D: 2제곱, T: 3제곱
# 초기 시작 값이 "A"라면 10으로 시작
if dartResult[0] == "A":
cnt = 10
# 그게 아니라면 수로 시작
else:
cnt = int(dartResult[0])
# 반복문을 통해 문자를 확인
for i in dartResult[1:]:
# 문자가 sdt에 포함되어 있다면
if i in sdt:
cnt = cnt ** (sdt.index(i) + 1) # 현재 수에서 sdt의 인덱스+1 제곱을 한다.
# 문자가 "*"이라면 현재 수를 두배해주고 이전에 수가 있다면 이전 수도 두배해준다.
elif i == "*":
cnt *= 2
if answer:
answer[-1] *= 2
# 문자가 "#"라면 현재 수를 - 해준다.
elif i == "#":
cnt = -cnt
# 그 외 문자라면 숫자인 것으로 게임 한판이 끝난 것이다.
else:
answer.append(cnt) # 점수를 answer 추가
# 다음 게임의 시작 값으로 초기화
if i == "A":
i = 10
cnt = int(i)
# 마지막 게임 점수 추가
answer.append(cnt)
return sum(answer)
github
'CodingTest > Programers' 카테고리의 다른 글
[programers] 프로그래머스(파이썬) : 소수 만들기 (0) | 2022.04.24 |
---|---|
[programers] 프로그래머스(파이썬) : 신고 결과 받기 (0) | 2022.04.23 |
[programers] 프로그래머스(파이썬) : 다단계 칫솔 판매 (0) | 2022.01.21 |
[programers] 프로그래머스 카카오(파이썬) : [3차] n진수 게임 (0) | 2022.01.07 |
[programers] 프로그래머스 카카오(파이썬) : [1차] 비밀지도 (0) | 2022.01.06 |