잡초의 일지

[Swift] 프로그래머스 | 코딩테스트 연습 -> 2020 카카오 인턴십 -> 키패드 누르기 본문

[코딩] 문제풀기/Swift

[Swift] 프로그래머스 | 코딩테스트 연습 -> 2020 카카오 인턴십 -> 키패드 누르기

JabCho 2021. 2. 19. 07:28
728x90
반응형
SMALL
func solution(_ numbers:[Int], _ hand:String) -> String {

    var result = ""

    var left_x = 3
    var left_y = 0
    var right_x = 3
    var right_y = 2
    
    func find2darrIndex(_ number: Int) -> (Int, Int) {
        let keypad = [["1", "2", "3"],
                      ["4", "5", "6"],
                      ["7", "8", "9"],
                      ["*", "0", "#"]]
        for j in 0..<4 {
            for i in 0..<3 {
                if (String(number) == keypad[j][i]){
                    return (j, i)
                }
            }
        }
        return (-1, -1)
    }
    
    for number in numbers {
        let key = find2darrIndex(number)
        let x = key.0
        let y = key.1
        if (y == 0){
            result += "L"
            left_x = x
            left_y = y
        }else if (y == 2){
            result += "R"
            right_x = x
            right_y = y
        }else{
            let left_key = abs(left_x - x) + abs(left_y - y)
            let right_key = abs(right_x - x) + abs(right_y - y)

             if (left_key < right_key){
                 result += "L"
                 left_x = x
                 left_y = y
             }else if (left_key > right_key){
                 result += "R"
                 right_x = x
                 right_y = y
             }else{
                 if (hand == "right"){
                     result += "R"
                     right_x = x
                     right_y = y
                 }else if (hand == "left"){
                     result += "L"
                     left_x = x
                     left_y = y
                 }
             }

        }
    }
    return result
}

뭔가 하드코딩이 되어버린것 같다.

좀 더 콤펙트한 방법이 있는지 찾아봐야겠다.

728x90
반응형
LIST
Comments