새소식

인기 검색어

프로그래머스/Lv.1

[Swift] 키패드 누르기

  • -
import Foundation

func distance(_ hand: (Int, Int), _ keyPad: (Int, Int)) -> Int {
    return abs(hand.0 - keyPad.0) + abs(hand.1 - keyPad.1)
}

func solution(_ numbers:[Int], _ hand:String) -> String {

    let hand = hand == "right" ? "R" : "L"
    
    let keyPad = [
        1 : (0,0), 2 : (0,1), 3 : (0,2),
        4 : (1,0), 5 : (1,1), 6 : (1,2),
        7 : (2,0), 8 : (2,1), 9 : (2,2),
        11 : (3,0), 0 : (3,1), 12: (3,2)
    ]
    
    var answer = ""

    var rightHand = keyPad[11]!
    var leftHand = keyPad[12]!

    for number in numbers {
        switch number {
        case 1, 4, 7 :
            leftHand = keyPad[number]!
            answer += "L"
        case 3, 6, 9 :
            rightHand = keyPad[number]!
            answer += "R"
        default :
            
            let left_distance = distance(leftHand, keyPad[number]!)
            let right_distance = distance(rightHand, keyPad[number]!)
            
            if left_distance == right_distance {
                if hand == "R" {
                    rightHand = keyPad[number]!
                } else {
                    leftHand = keyPad[number]!
                }
                answer += hand
            }
            else if left_distance > right_distance {
                rightHand = keyPad[number]!
                answer = answer + "R"
            } else if left_distance < right_distance {
                leftHand = keyPad[number]!
                answer = answer + "L"
            }
        }
    }

    return answer
}

 

'프로그래머스 > Lv.1' 카테고리의 다른 글

[Swift] 하샤드 수  (0) 2023.02.16
[Swift] 푸드 파이트 대회  (0) 2023.02.16
[Swift] 크레인 인형 뽑기  (0) 2023.02.16
[Swift] 크기가 작은 부분 문자열  (0) 2023.02.16
[Swift] 콜라츠 추측  (0) 2023.02.16
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.