Algorithm

[카카오 코테 2018 | python] [1차] 다트 게임

삐롱K 2025. 6. 19. 12:34
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)

 

[추천 강의]

https://inf.run/7TU84

 

38군데 합격 비법, 2025 코딩테스트 필수 알고리즘| 딩코딩코 - 인프런 강의

현재 평점 5.0점 수강생 2,019명인 강의를 만나보세요. 초보자도 쉽게 이해하는 단계별 설명으로, 막연했던 코딩 테스트가 명확해집니다. 필요한 것만 배우고 바로 실전에 적용하세요! 알고리즘,

www.inflearn.com

 

https://inf.run/jzapB

 

6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법| 딩코딩코 - 인

현재 평점 5.0점 수강생 457명인 강의를 만나보세요. 모든 이력서가 비슷해 보이는 세상, ‘차별화’가 합격을 만듭니다. 6주간, 백엔드 실무자가 직접 전하는 실전 이력서 전략 4가지를 배우세요.

www.inflearn.com

 

728x90
반응형