티스토리 뷰

나의 풀이

 

import Foundation

func solution(_ dartResult:String) -> Int {
    var point = [0, 0, 0]
    var square = [1, 1, 1]
    var opt = [1, 1, 1]
    var temp: Character = " "
    var index: Int = 0
    
    var result: Int = 0
    
    for c in dartResult {

        switch c{
        case "0"..."9":
            if temp == "1", c == "0" {
                point[index-1] = 10
            } else {
                point[index] = Int(String(c)) ?? 0
                index += 1
            }
        case "D":
            square[index-1] = 2
        case "T":
            square[index-1] = 3
        case "*":
            opt[index-1] = 2
        case "#":
            opt[index-1] = -1
        default:
            break
        }
        temp = c
    }
    
    for i in 0..<3 {
        
        let gamePoint: Int = (Int(pow(Decimal(point[i]), square[i]).description) ?? 0) * opt[i]
        result += gamePoint
        
        if i < 2 && opt[i+1] == 2 {
            result += gamePoint
        }
    }

    return result
}

 

다른 사람의 풀이

func solution(_ dartResult:String) -> Int {

        let numberList = dartResult.split(whereSeparator: {$0.isLetter || $0 == "#" || $0 == "*"})
        let letterList = dartResult.split(whereSeparator: {$0.isNumber})

        var totalScore = 0

        for (i, (number, letter)) in zip(numberList, letterList).enumerated() {
            var score = 0
            if let number = Int(number) {
                score = letter.contains("D") ? number * number : letter.contains("T") ? number * number * number : number

            }

            if letter.contains("*") {
                score *= 2
            } else if letter.contains("#") {
                score = -score
            }

            if i != 2 {
                if letterList[i + 1].contains("*") {
                    score *= 2
                }
            }

            totalScore += score

        }


        return totalScore
}

댓글
공지사항