Algorithm/프로그래머스

[프로그래머스 스위프트] 키패드 누르기

devKen 2022. 9. 20. 20:01

아이디어

왼손과 오른손을 결정짓는 규칙을 생각하지 못해서 검색으로 힌트를 얻었다. 이중 배열로 그래프를 만든 후 한 칸씩만 움직일 수 있다는 점을 이용해서 풀 생각이었지만 레벨 1이라는 점과 인턴 문제라는 점에서 조금 더 쉽게 풀 수 있을 거라는 걸 예상하지 못했다. 테스트 케이스를 두어 개 더 작성했다면 혼자 풀 수도 있었을 거 같다.

해답

import Foundation

func solution(_ numbers:[Int], _ hand:String) -> String {
    var locationLeft = 10
    var locationRight = 12
    var result: String = ""
    for number in numbers {
        var number = number
        if number == 1 || number == 4 || number == 7 {
            result += "L"
            locationLeft = number
        } else if number == 3 || number == 6 || number == 9 {
            result += "R"
            locationRight = number
        } else {
            if number == 0 {
                number = 11
            }
            let leftDistance = abs(number - locationLeft) / 3 + abs(number - locationLeft) % 3
            let rightDistance = abs(number - locationRight) / 3 + abs(number - locationRight) % 3
            if leftDistance < rightDistance {
                result += "L"
                locationLeft = number
            } else if leftDistance > rightDistance {
                result += "R"
                locationRight = number
            } else {
                if hand == "right" {
                    result += "R"
                    locationRight = number
                } else {
                    result += "L"
                    locationLeft = number
                }
            }
        }
    }
    return result
}