pow함수는 Foundation import 필요, 제곱 pow(a,b) 의 a는 decimal이어야함.
import Foundation
func solution(_ dartResult:String) -> Int {
var array = Array(dartResult).map{String($0)}
var nArray = ["0","1","2","3","4","5","6","7","8","9","10",]
var sArray = ["S","D","T"]
var A = [Int]()
var B = [String]()
var C = [String]()
var flag = false
var tenFlag = false
for (i,n) in array.enumerated(){
if nArray.contains(n){
if array[i+1] != "0" {//10이 아닐때
if tenFlag == true {
tenFlag = false
continue
}
tenFlag = false
A.append(Int(n)!)
}
else if array[i+1] == "0" {// 뒤에게 0 이면 10이다.
A.append(10)
tenFlag = true
}
}
if sArray.contains(n){
B.append(n)
flag = true
}
else if flag == true {
if n == "#" || n == "*"{C.append(n)}
else {C.append("1")}
flag = false
}
}
if C.count != 3 {C.append("1")}
var newB:[Int] = B.map{
switch $0 {
case "S" : return 1
case "D" : return 2
case "T" : return 3
default : return 1
}
}
var newC:[Int] = C.map{
switch $0 {
case "1" : return 1
case "#" : return -1
case "*" : return 2
default : return 1
}
}
if C[2] == "*" {
newC[1] *= 2
}
if C[1] == "*"{
newC[0] *= 2
}
var result = 0
var zegob = 1
print(A,newB,newC)
for i in stride(from:2,through:0,by:-1){
zegob = 1
for _ in 0..<newB[i]{
zegob *= A[i]
}
let a = zegob * newC[i]
result += a
}
return result
return 0
}
그리고 1등 코드: string 쪼개기는 split을 사용해야할 것같다. 아래에서 split으로 필요없는 문자들을 걸러낸다. 또한 두 문자열의 길이가 같기에 zip 함수를 사용했다.
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
}
참고로 아래처럼 trail argument 제거가능하다. 그러나 whereSeparator대신 seperator은 안된다,