[Swift 알고리즘] 키패드 누르기

장주명·2021년 5월 10일

https://programmers.co.kr/learn/courses/30/lessons/67256

func solution(_ numbers:[Int], _ hand:String) -> String {
    
    var left = (1,4)
    var right = (3,4)
    var answer = ""
    
    
    func dis(_ number : (Int,Int),_ standard : (Int,Int)) -> Int {
        
        let distence = abs(number.0 - standard.0) + abs(number.1 - standard.1)
        
        return distence
    }
    
    for i in numbers {
        var number = i
        if number == 0 {
            number = 11
        }
        switch number {
        case 3,6,9:
            let row = number / 3
            right = (3,row)
            answer += "R"
        case 1,4,7:
            let row = number / 3 + 1
            left = (1,row)
            answer += "L"
        default:
            
            let row = 1 + (number / 3)
            let number = (2,row)
            let gap_right = dis(number, right)
            let gap_left = dis(number, left)
            
            if gap_right > gap_left {
                answer += "L"
                left = number
            } else if gap_right < gap_left{
                answer += "R"
                right = number
                
            } else {
                if hand == "right" {
                    answer += "R"
                    right = number
                } else {
                    answer += "L"
                    left = number
                }
            }
        }
    }

    return answer
}
profile
flutter & ios 개발자

0개의 댓글