공대생의 비망록

[프로그래머스][Lv. 1] 키패드 누르기 Swift 풀이 본문

Programming Language/Swift

[프로그래머스][Lv. 1] 키패드 누르기 Swift 풀이

myungsup1250 2022. 3. 14. 15:28

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

 

코딩테스트 연습 - 키패드 누르기

[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL"

programmers.co.kr

풀이는 추후에 차차 올리도록 하겠습니다...

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import Foundation
 
func solution(_ numbers:[Int], _ hand:String) -> String {
    let isLeft: Bool = (hand == "left" ? true : false)
    var leftTh: Int = -1, rightTh: Int = -2
    let coord: [Int:String] = [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", 0:"3 1", -1:"3 0", -2:"3 2"]
    var answer: String = "", thumb: String = ""
    for num in numbers {
        switch num {
            case 1, 4, 7:
            leftTh = num
            thumb = "L"
            case 3, 6, 9:
            rightTh = num
            thumb = "R"
            case 2, 5, 8, 0:
            if leftTh == -1 && rightTh == -2 {
                if isLeft {
                    leftTh = num
                    thumb = "L"
                } else {
                    rightTh = num
                    thumb = "R"
                }
            } else {
                let numPos: [Int] = coord[num]!.components(separatedBy: " ").map{Int($0)!}
                let leftPos: [Int] = coord[leftTh]!.components(separatedBy: " ").map{Int($0)!}
                let rightPos: [Int] = coord[rightTh]!.components(separatedBy: " ").map{Int($0)!}
                let leftDist: Int = abs(numPos[0] - leftPos[0]) + abs(numPos[1] - leftPos[1])                                                      
                let rightDist: Int = abs(numPos[0] - rightPos[0]) + abs(numPos[1] - rightPos[1])
                if leftDist > rightDist {
                    rightTh = num
                    thumb = "R"
                } else if leftDist < rightDist {
                    leftTh = num
                    thumb = "L"
                } else { // leftDist == rightDist
                    if isLeft {
                        leftTh = num
                        thumb = "L"
                    } else {
                        rightTh = num
                        thumb = "R"                        
                    }
                }
                
            }
            default:
            return "ERROR"
        }
        answer += thumb 
    }
    return answer
}
cs
Comments