공대생의 비망록

[프로그래머스][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 147:
            leftTh = num
            thumb = "L"
            case 369:
            rightTh = num
            thumb = "R"
            case 2580:
            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