프로그래머스
[카카오 인턴] 키패드 누르기
끝까지 처음처럼
2022. 9. 9. 20:26
728x90
import kotlin.math.*
class Solution {
fun solution(numbers: IntArray, hand: String): String {
var answer = ""
val pinger = hand[0].toString().toUpperCase()
val keyPad = arrayOf(arrayOf(0,0),arrayOf(0,1),arrayOf(0,2),
arrayOf(1,0),arrayOf(1,1),arrayOf(1,2),
arrayOf(2,0),arrayOf(2,1),arrayOf(2,2),
arrayOf(3,1)) // 키패드 모양과 동일하게.....ㅎ
var startLeft = mutableListOf(3,0)
var startRight = mutableListOf(3,2)
for(i in 0 .. numbers.size-1){
when(numbers[i]){
1,4,7 -> {
answer += "L"
startLeft[0] = keyPad[numbers[i]-1][0]
startLeft[1] = keyPad[numbers[i]-1][1]
}
3,6,9 -> {
answer += "R"
startRight[0] = keyPad[numbers[i]-1][0]
startRight[1] = keyPad[numbers[i]-1][1]
}
2,5,8 -> {
var temp1 = keyPad[numbers[i]-1] // 누르려는 버튼위치
val temp2 = abs(temp1[0]-startRight[0]) + abs(temp1[1]-startRight[1])
val temp3 = abs(temp1[0]-startLeft[0]) + abs(temp1[1]-startLeft[1])
val btnRightLen = temp2
val btnLeftLen = temp3
if(btnRightLen < btnLeftLen){
answer += "R"
startRight[0] = keyPad[numbers[i]-1][0]
startRight[1] = keyPad[numbers[i]-1][1]
}
if(btnRightLen > btnLeftLen){
answer += "L"
startLeft[0] = keyPad[numbers[i]-1][0]
startLeft[1] = keyPad[numbers[i]-1][1]
}
if(btnRightLen == btnLeftLen){
answer += pinger
if(pinger == "R"){
startRight[0] = keyPad[numbers[i]-1][0]
startRight[1] = keyPad[numbers[i]-1][1]
}else{
startLeft[0] = keyPad[numbers[i]-1][0]
startLeft[1] = keyPad[numbers[i]-1][1]
}
}
}
0 -> {
var temp1 = keyPad[9] // 누르려는 버튼위치
val temp2 = abs(temp1[0]-startRight[0]) + abs(temp1[1]-startRight[1])
val temp3 = abs(temp1[0]-startLeft[0]) + abs(temp1[1]-startLeft[1])
val btnRightLen = temp2
val btnLeftLen = temp3
if(btnRightLen < btnLeftLen){
answer += "R"
startRight[0] = keyPad[9][0]
startRight[1] = keyPad[9][1]
}
if(btnRightLen > btnLeftLen){
answer += "L"
startLeft[0] = keyPad[9][0]
startLeft[1] = keyPad[9][1]
}
if(btnRightLen == btnLeftLen){
answer += pinger
if(pinger == "R"){
startRight[0] = keyPad[9][0]
startRight[1] = keyPad[9][1]
}else{
startLeft[0] = keyPad[9][0]
startLeft[1] = keyPad[9][1]
}
}
}
}
}
return answer
}
}
저의 현재 실력으로 푼 문제 답안이며, 가장 좋은 코드는 아닐 수 있으며, 코틀린을 공부하면서 추가적으로 알게 된 개념이 있어 다시 풀 경우 추가적으로 코드를 작성 할 수 있도록 하겠습니다.