문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/17682
문제 풀이)
맨 처음 풀이했을땐 다트 점수에 10이 포함될 수도 있다는 사실을 잊고 풀어 오답이었다.
그 다음 10에 대한 처리를 해주었더니 6, 7번 테스트 케이스에서 계속 오류가 났었는데 10을 할당한 이후 초기화 시켜주는 것을 깜빡했었다.
- 총 세번 던지는 것이므로 각 횟수의 점수를 scores = [0, 0, 0] 으로 초기화 한후 update 시켜주는 방식을 이용했다.
- 싱글, 더블, 트리플의 관리는 딕셔너리형으로 관리했다.
- dartResult 문자열을 하나하나 돌며
- 만약 숫자라면 scores에서 해당 횟수에 해당하는 점수를 update해준다.
- 이 때 10에 관한 예외처리가 들어가줘야 한다.
- 싱글, 더블, 트리플에 관한 처리를 해준다.
- 옵션에 대한 처리를 해준다.
- 만약 숫자라면 scores에서 해당 횟수에 해당하는 점수를 update해준다.
전체 소스 코드는 다음과 같다.
def solution(dartResult):
scores = [0, 0, 0]
multi = {'S': 1, 'D': 2, 'T': 3}
cnt = -1
tmp = 0
for i in range(len(dartResult)):
if dartResult[i].isdigit():
if dartResult[i+1].isdigit(): # 10에 대한 처리
tmp = 10
continue
if tmp != 0: # 만약 지금 숫자가 10이라면
cnt += 1
scores[cnt] = tmp
tmp = 0
else:
cnt += 1
scores[cnt] = int(dartResult[i])
else:
if dartResult[i] in multi: # 싱글, 더블, 트리플에 관한 처리
scores[cnt] = scores[cnt] ** multi[dartResult[i]]
else:
if dartResult[i] == '*':
if cnt == 0: # 첫번째인 경우에는 첫번째 점수만 더블이 된다.
scores[0] *= 2
else:
for j in range(cnt, cnt-2, -1):
scores[j] = scores[j] * 2
elif dartResult[i] == '#':
scores[cnt] *= -1
return sum(scores)
'Algorithm' 카테고리의 다른 글
[프로그래머스 - lv1] 나머지 한 점 (0) | 2023.03.20 |
---|---|
[프로그래머스 - lv1] 최소직사각형 (0) | 2023.03.13 |
[프로그래머스 - lv1] 문자열 나누기 (0) | 2023.03.08 |
[프로그래머스 - lv1, 2023 KAKAO BLIND RECRUITMENT] 개인정보 수집 유효기간 파이썬 (0) | 2023.03.07 |
[프로그래머스 - lv1] 기사단원의 무기 파이썬 (4) | 2023.03.06 |