Programmers.키패드 누르기(Swift)

junseole·2021년 9월 1일
0
post-thumbnail

문제설명

1, 4, 7은 왼손

3, 6, 9는 오른손

2, 5, 8, 0 은 왼손 오른손중 더 가까운 손이 간다.

문제 풀이

import Foundation

//목표 번호와 현재 손위치의 거리 계산
func handDistance(_ cur:[Int], _ target:[Int]) -> Int{
    return abs(target[0] - cur[0]) + abs(target[1] - cur[1])
}

func solution(_ numbers:[Int], _ hand:String) -> String {
    var answer:String = ""
    
    var leftHand:[Int] = [4,1]
    var rightHand:[Int] = [4,3]
    
    for var number in numbers{
        if number == 0{
            number = 11
        }
        switch number {
        case 1, 4, 7:
            answer += "L"
            leftHand = [(number / 3) + 1, 1]
        case 3, 6, 9:
            answer += "R"
            rightHand = [(number / 3), 3]
        default:
            let row:Int = (number / 3) + 1
            let numPos = [row , 2]
            let leftHandDist:Int = handDistance(leftHand, numPos)
            let rightHandDist:Int = handDistance(rightHand, numPos)
            
            if leftHandDist < rightHandDist{
                answer += "L"
                leftHand = numPos
            }else if leftHandDist > rightHandDist{
                answer += "R"
                rightHand = numPos
            }else{
                if hand == "left"{
                    answer += "L"
                    leftHand = numPos
                }else{
                    answer += "R"
                    rightHand = numPos
                }
            }
        }
    }
    return answer
}

소 감

0을 10으로 치환해서 각각 줄마다 3의 차이가 나는것을 이용해 % 계산을 통해 현재 자리를 구하는 점이 참신했다.

문제 바로가기

profile
Swift와 함께 여행중입니다.

0개의 댓글