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 |