본문 바로가기
Algorithm

SwiftUI: [카카오 인턴] 키패드 누르기

by songmoro 2023. 12. 18.
728x90

이전 손가락 위치를 기억해서 주어진 숫자까지 가장 빠르게 도달할 수 있는 손을 구하는 문제 입니다.

 

1, 3, 7은 왼손, 4, 6, 9는 오른손으로 처리하고, 2, 5, 8, 0에 대해서는 미리 만들어둔 딕셔너리에서 최소 경로를 찾아가도록 했습니다.

 

func solution(_ numbers:[Int], _ hand:String) -> String {
    var hand = hand.first!.uppercased()
    var left = 10
    var right = 12
    var dict = [2: [1: 1, 4: 2, 7: 3, 3: 1, 6: 2, 9: 3, 2: 0, 5: 1, 8: 2, 0: 3, 10: 4, 12: 4],
                5: [1: 2, 4: 1, 7: 2, 3: 2, 6: 1, 9: 2, 2: 1, 5: 0, 8: 1, 0: 2, 10: 3, 12: 3],
                8: [1: 3, 4: 2, 7: 1, 3: 3, 6: 2, 9: 1, 2: 2, 5: 1, 8: 0, 0: 1, 10: 2, 12: 2],
                0: [1: 4, 4: 3, 7: 2, 3: 4, 6: 3, 9: 2, 2: 3, 5: 2, 8: 1, 0: 0, 10: 1, 12: 1]]
    
    return numbers.reduce("") {
        if [1, 4, 7].contains($1) {
            left = $1
            return $0 + "L"
        }
        else if [3, 6, 9].contains($1) {
            right = $1
            return $0 + "R"
        }
        else {
            if dict[$1]![left]! < dict[$1]![right]! {
                left = $1
                return $0 + "L"
            }
            else if dict[$1]![left]! > dict[$1]![right]! {
                right = $1
                return $0 + "R"
            }
            else {
                hand == "L" ? (left = $1) : (right = $1)
                return $0 + hand
            }
        }
    }
}
728x90

'Algorithm' 카테고리의 다른 글

SwiftUI: 가장 많이 받은 선물  (1) 2024.02.05
SwiftUI: 크레인 인형뽑기 게임  (1) 2023.12.18
SwiftUI: 햄버거 만들기  (0) 2023.12.17
SwiftUI: 신고 결과 받기  (0) 2023.12.17
SwiftUI: 신규 아이디 추천  (0) 2023.12.17