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

Junyoung Park·2022년 8월 17일
0

코딩테스트

목록 보기
570/631
post-thumbnail

1. 문제 설명

키패드 누르기

2. 문제 분석

딕셔너리를 통해 특정 패드의 위치를 알아냈다.

3. 나의 풀이

import Foundation

func solution(_ numbers:[Int], _ hand:String) -> String {
    var keypads = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [-1, 0, -2]]
    var keypadsDict = [Int:(Int, Int)]()
    for i in 0..<4 {
        for j in 0..<3 {
            let keypad = keypads[i][j]
            keypadsDict[keypad] = (i, j)
        }
    }
    
    var curLeft = (3, 0)
    var curRight = (3, 2)
    
    var moves = ""
    
    for number in numbers {
        if number == 1 || number == 4 || number == 7 {
            moves.append("L")
            curLeft = keypadsDict[number]!
        } else if number == 3 || number == 6 || number == 9 {
            moves.append("R")
            curRight = keypadsDict[number]!
        } else {
            let numberPos = keypadsDict[number]!
            let leftDist = abs(numberPos.0 - curLeft.0) + abs(numberPos.1 - curLeft.1)
            let rightDist = abs(numberPos.0 - curRight.0) + abs(numberPos.1 - curRight.1)
            if leftDist < rightDist {
                moves.append("L")
                curLeft = numberPos
            } else if leftDist > rightDist {
                moves.append("R")
                curRight = numberPos
            } else {
                if hand == "right" {
                    moves.append("R")
                    curRight = numberPos
                } else {
                    moves.append("L")
                    curLeft = numberPos
                }
            }
        }
    }
    
    return moves
}
profile
JUST DO IT

0개의 댓글