ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [카카오 인턴] 키패드 누르기
    프로그래머스 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
        }
    }

    저의 현재 실력으로 푼 문제 답안이며, 가장 좋은 코드는 아닐 수 있으며, 코틀린을 공부하면서 추가적으로 알게 된 개념이 있어 다시 풀 경우 추가적으로 코드를 작성 할 수 있도록 하겠습니다.

    '프로그래머스' 카테고리의 다른 글

    체육복  (0) 2022.09.10
    실패율  (0) 2022.09.09
    두 개 뽑아서 더하기  (0) 2022.09.09
    3진법 뒤집기  (0) 2022.09.09
    내적  (0) 2022.09.09
Designed by Tistory.