- 사내 시험의 배열 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()
}
}