처음에 0을 처리하지 않아 오류가 발생하였다. 0은 11로 생각한 후 손가락 사이의 거리를 계산하였다. 왼손잡이인지 오른손잡이인지에 따라 손의 위치를 변경하고, result에 문자열을 추가하는 행동이 반복되어서 따로 함수로 정의하였다.
func solution(_ numbers:[Int], _ hand:String) -> String {
var leftHand = 10
var rightHand = 12
var result = ""
let leftNums = [1, 4, 7]
let rightNums = [3, 6, 9]
func moveHandAndAddResult(isLeftHand: Bool, number: Int) {
if isLeftHand {
leftHand = number
result += "L"
} else {
rightHand = number
result += "R"
}
}
for num in numbers {
if leftNums.contains(num) {
moveHandAndAddResult(isLeftHand: true, number: num)
} else if rightNums.contains(num) {
moveHandAndAddResult(isLeftHand: false, number: num)
} else {
let number = num == 0 ? 11 : num
let left = abs((number - leftHand) / 3 + (number - leftHand) % 3)
let right = abs((number - rightHand) / 3 + (number - rightHand) % 3)
if left == right {
if hand == "left" {
moveHandAndAddResult(isLeftHand: true, number: number)
} else {
moveHandAndAddResult(isLeftHand: false, number: number)
}
} else if left < right {
moveHandAndAddResult(isLeftHand: true, number: number)
} else {
moveHandAndAddResult(isLeftHand: false, number: number)
}
}
}
return result
}