728x90
반응형
Q1) 이 문제 어떻게 이해하셨나요?
A1) 이 문제는 다트 점수를 규칙에 따라 계산한 다음 총합을 구하는 문제라고 이해했습니다. 다트는 총 3세트로 구성이 되어있고, 각 세트는 점수, 보너스, 옵션으로 구성되어있습니다.
Q2) 어떻게 풀 계획인가요?
A2) 우선 입력값의 문자열을 순서대로 탐색하면서 점수, 보너스, 옵션을 파싱합니다.
점수를 계산한 후, 옵션에 따라 현재 점수와 이전 점수를 처리하고 마지막에 점수 리스트의 합을 반환합니다.
*풀이 과정
1. 먼저 문자열을 탐색하면서 점수를 뽑는데, 10은 두자리 숫자라서 예외처리를 해줘야합니다.
2. 점수를 뽑았으면 그 다음 문자는 반드시 보너스니까, S/D/T에 따라 제곱 계산을 해줍니다.
3. 그 다음은 문자가 * 또는 # 일 수 있으므로, 그 부분은 조건문으로 처리합니다.
4. 위에서 계산된 점수는 scores 리스트에 저장하고, 마지막에 총합을 sum(scores)로 구해 반환합니다.
📌 최적 코드
dartResult = "1S2D*3T"
def solution(dartResult):
scores = []
i = 0
length = len(dartResult)
while i < length:
# 1. 점수 추출 (10일 수도 있으므로 2자리 처리)
if dartResult[i] == '1' and i + 1 < length and dartResult[i+1] == '0':
score = 10
i += 2
else:
score = int(dartResult[i])
i += 1
# 2. 보너스 처리
bonus = dartResult[i]
if bonus == 'S':
score = score ** 1
elif bonus == 'D':
score = score ** 2
elif bonus == 'T':
score = score ** 3
i += 1
# 3. 옵션 처리 (* or #)
if i < length and dartResult[i] in ['*', '#']:
if dartResult[i] == '*':
score *= 2
if scores: # 이전 점수도 2배 처리
scores[-1] *= 2
else:
score *= -1
i += 1
# 4. 점수 저장
scores.append(score)
return sum(scores)
728x90
반응형
'Algorithm' 카테고리의 다른 글
[백준 15649 | python] N과 M (1) (백트레킹) (0) | 2025.06.21 |
---|---|
[카카오 코테 2018 | python] 비밀지도 (0) | 2025.06.19 |
[카카오 코테 2023 | python] 개인정보 수집 유효기간 (0) | 2025.06.18 |
[카카오 코테 2022 | python] 양궁대회 (0) | 2025.06.17 |
[카카오 코테 2019 | python] 오픈 채팅방 ✅ (0) | 2025.06.17 |