[Level 1 ] 키패드 누르기 + Swift

sanghee·2021년 9월 6일
0

🙈코딩테스트

목록 보기
18/52
post-thumbnail

키패드 누르기

코딩테스트 연습 - [카카오 인턴] 키패드 누르기

나의 풀이

처음에 0을 처리하지 않아 오류가 발생하였다. 0은 11로 생각한 후 손가락 사이의 거리를 계산하였다. 왼손잡이인지 오른손잡이인지에 따라 손의 위치를 변경하고, result에 문자열을 추가하는 행동이 반복되어서 따로 함수로 정의하였다.

func solution(_ numbers:[Int], _ hand:String) -> String {
    var leftHand = 10
    var rightHand = 12
    var result = ""
    
    let leftNums = [1, 4, 7]
    let rightNums = [3, 6, 9]
    
    func moveHandAndAddResult(isLeftHand: Bool, number: Int) {
        if isLeftHand {
            leftHand = number
            result += "L"
        } else {
            rightHand = number
            result += "R"
        }
    }
    
    for num in numbers {
        if leftNums.contains(num) {
            moveHandAndAddResult(isLeftHand: true, number: num)
        } else if rightNums.contains(num) {
            moveHandAndAddResult(isLeftHand: false, number: num)
        } else {
            let number = num == 0 ? 11 : num
            
            let left = abs((number - leftHand) / 3 + (number - leftHand) % 3)
            let right = abs((number - rightHand) / 3 + (number - rightHand) % 3)
            
            if left == right {
                if hand == "left" {
                    moveHandAndAddResult(isLeftHand: true, number: number)
                } else {
                    moveHandAndAddResult(isLeftHand: false, number: number)
                }
            } else if left < right {
                moveHandAndAddResult(isLeftHand: true, number: number)
            } else {
                moveHandAndAddResult(isLeftHand: false, number: number)
            }
        }
    }
    return result
}
profile
👩‍💻

0개의 댓글