키패드 누르기

HJ Kwon·2021년 12월 17일
0
  • 사내 시험의 배열 idx와 class를 이용하는 형태에서 고민하였다.
  • Coordinates를 나타내는 class를 만들고 이를 이차원 배열로 만들어 쉽게 좌표로 표현하려 했으나, 너무 오버하는 느낌이었다.
  • 이에 row,col의 idx를 저장한 각 1차 배열로 접근하였다.
class Solution {
    fun getDist(mFrom: Int, mTo: Int): Int {
        var mRowCoord = intArrayOf(3, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3)
        var mColCoord = intArrayOf(1, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 2)

        return (kotlin.math.abs(mRowCoord[mFrom] - mRowCoord[mTo]) + kotlin.math.abs(mColCoord[mFrom] - mColCoord[mTo]))
    }

    fun solution(numbers: IntArray, hand: String): String {
        var mCurrentLeft = 10
        var mCurrentRight = 11
        var mAnswer = StringBuilder()
        //1,4,7 | 3,6,9
        for (i in numbers.indices) {
            if (numbers[i] == 1 || numbers[i] == 4 || numbers[i] == 7) {
                mAnswer.append("L")
                mCurrentLeft = numbers[i]
            } else if (numbers[i] == 3 || numbers[i] == 6 || numbers[i] == 9) {
                mAnswer.append("R")
                mCurrentRight = numbers[i]
            } else {
                var mDistFromLeft = getDist(mCurrentLeft, numbers[i])
                var mDistFromRight = getDist(mCurrentRight, numbers[i])
                if (mDistFromLeft == mDistFromRight) {
                    if (hand == "right") {
                        mAnswer.append("R")
                        mCurrentRight = numbers[i]
                    } else {
                        mAnswer.append("L")
                        mCurrentLeft = numbers[i]
                    }
                } else {
                    if (mDistFromLeft < mDistFromRight) {
                        mAnswer.append("L")
                        mCurrentLeft = numbers[i]
                    } else {
                        mAnswer.append("R")
                        mCurrentRight = numbers[i]
                    }
                }
            }
        }
        return mAnswer.toString()
    }
}

0개의 댓글