티스토리 뷰

알고리즘

[카카오 인턴] 키패드 누르기

아나니리 2021. 1. 10. 14:44

코틀린

programmers.co.kr/learn/courses/30/lessons/67256

 

코딩테스트 연습 - 키패드 누르기

[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL"

programmers.co.kr

class Solution {
    fun solution(numbers: IntArray, hand: String): String {
        var answer = ""

        val map = mutableMapOf(
            1 to Pair(0, 0),
            2 to Pair(0, 1),
            3 to Pair(0, 2),
            4 to Pair(1, 0),
            5 to Pair(1, 1),
            6 to Pair(1, 2),
            7 to Pair(2, 0),
            8 to Pair(2, 1),
            9 to Pair(2, 2),
            "*" to Pair(3, 0),
            0 to Pair(3, 1),
            "#" to Pair(3, 2)
        )

        fun Pair<Int, Int>.distance(pair: Pair<Int, Int>): Int =
            abs(this.first - pair.first) + abs(this.second - pair.second)

        var currentL: Any = "*"
        var currentR: Any = "#"

        for (number in numbers) {
            if (setOf(1, 4, 7).contains(number)) {
                answer += "L"
                currentL = number
            } else if (setOf(3, 6, 9).contains(number)) {
                answer += "R"
                currentR = number
            } else {
                val postPosition = map[number]!!

                val a: Int = postPosition.let { map[currentL]!!.distance(it) }

                val b: Int = postPosition.let { map[currentR]!!.distance(it) }

                if (a < b) {
                    answer += "L"
                    currentL = number
                } else if (a == b) {
                    if (hand == "right") {
                        answer += "R"
                        currentR = number
                    } else {
                        answer += "L"
                        currentL = number
                    }
                } else {
                    answer += "R"
                    currentR = number
                }
            }
        }

        return answer
    }
}

'알고리즘' 카테고리의 다른 글

[카카오 인턴] 수식 최대화  (0) 2021.01.10
2020 카카오 1차 코딩테스트 문제 1  (0) 2020.01.26
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함