swift 다트게임

quokka·2022년 5월 17일
0

코딩테스트

목록 보기
44/63

"1S2D3T", "1D2S#10S", "1D2S0T", "1S2T3S", "1D#2S3S", "1T2D3D#", "1D2S3T*" 와 같은 문자열만 나누면 쉽게 풀수 있는 문제입니다. split함수에서 분기처리를 잘 해주면 원하는 문자열을 얻을 수 있습니다.

func solution(_ dartResult: String) -> Int {
    let num = dartResult.split { $0.isLetter || $0 == "#" || $0 == "*" }.map { Int($0)!}
    let letter = dartResult.split { $0.isNumber }
    var values = [Int]()
    for (i,(v, l)) in zip(num, letter).enumerated() {
        var value = 0
        let letter = l.first!
        let special = l.last!
        if letter == "S" {
            value = v
        } else if letter == "D" {
            value = v * v
        } else if letter == "T" {
            value = v * v * v
        }
        
        if special == "*" {
            if i > 0 {
                values[i-1] *= 2
            }
            value *= 2
        } else if special == "#" {
            value *= -1
        }
        values.append(value)
    }
    return values.reduce(0, +)
}
profile
iOS를 공부하는 개발자입니다~ㅎㅎ

0개의 댓글

관련 채용 정보