개발/PS

[Swift] 프로그래머스 Lv1 다트게임

유훈 | Yuhun 2022. 3. 29. 02:57
반응형

아직 스위프트로 알고리즘은 익숙하지 않아서인지.. 문제를 푸는데 헤맵니다..

import Foundation

func solution(_ dartResult:String) -> Int {
    let bonus: [Character:Int] = ["S":1, "D":2, "T":3] // 제곱 보너스
    var result: Int = 0
    var number: String = "" // 10도 고려해야 함으로(사실 두자리는 10 밖에 없어서 다른 방법도 괜찮을듯 합니다.)
    var data: [Int] = [0,0,0] // 다트 3개 점수 배열
    var index: Int = -1 // 3번의 값 저장
    
    for dart in dartResult{
        if dart == "*" { // *
            if index >= 1 {
                data[index-1] *= 2
            }
            data[index] *= 2
            number = ""
        } else if dart == "#" { // #
            data[index] = -data[index]
            number = ""
        } else if dart == "S" || dart == "D" || dart == "T" { // 보너스
            data[index] = Int(pow(Double(number)!, Double(bonus[dart]!)))
            number = ""
        } else { // 숫자가 입력되었을 때
            if number.isEmpty && index < 2 {
                index += 1
            }
            number += String(dart)
        }
    }
    result = data.reduce(0, +) //Sum
    
    return result
}

 

방식은 간단합니다.
무조건 세번 던지는 것으로 정해져 있음으로 배열을 만들고 각 명령어에 대한 점수를 계산했습니다.
그리고 점수를 입력받을땐 0~10 임으로 1과 0이 따로 들어와 이 부분을 고려해 주어야 합니다.

제곱은 pow 함수를 사용했는데 계속 obtional이 조금 헷갈립니다..

반응형