1) *=10, 0=11, #=12로 생각하고 접근했습니다.
2) 번호의 상,하,좌,우의 거리는 1이다. 설명을 잘 읽어보면 번호의 대각선의 거리는 2이므로 대각선의길이를 피타고라스의정리로 구해줄 필요가 없다.
3) 눌러야할 번호와 눌러져있는 왼쪽,오른쪽 번호들의 거리는 | 눌러져야하는 번호 - 눌러져있는번호(왼,오) |를 3으로 나눈 나머지와 몫이다.
4) 위에서 구한 거리가 같다면 왼손잡이 오른손잡이를 판단해준후 값을 구하면된다.
func solution(_ numbers:[Int], _ hand:String) -> String {
var result = ""
var leftHand = 10
var rightHand = 12
for number in numbers {
switch number {
case 1,4,7:
result.append("L")
leftHand = number
case 2,5,8,0:
var number = number
if number == 0 {
number = 11
}
let leftDistance = abs(number-leftHand)/3 + abs(number-leftHand)%3
let rightDistance = abs(number-rightHand)/3 + abs(number-rightHand)%3
if rightDistance < leftDistance {
result.append("R")
rightHand = number
} else if rightDistance == leftDistance {
if hand == "right" {
result.append("R")
rightHand = number
} else { // hand == "left"
result.append("L")
leftHand = number
}
} else { // leftDistance < rightDistance
result.append("L")
leftHand = number
}
case 3,6,9:
result.append("R")
rightHand = number
default: break
}
}
return result
}