[프로그래머스] 키패드 누르기 (Kotlin)

728x90

문제

 


이해

엄지손가락만으로 터치
왼손 * 시작
오른손 # 시작
상하좌우 이동

2580 의경우에는 현재 왼손, 오른손 위치중 가까운 손으로 터치

접근

  1. 숫자의 좌표화(거리 비교) , but 거리는 안구해도됨
  2. Pair의 함수 추가
  3. if 분기 나누고 거리 비교 하기

풀이

import kotlin.math.abs

fun main() {
    val data = intArrayOf(1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5)
    val data1 = "right"
    println(Solution().solution(data, data1))
}

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

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

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

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

        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 position = map[number]!!

                var a: Int = position.let { map[currentL]!!.distance(it) }
                var b: Int = position.let { map[currentR]!!.distance(it) }

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

        return answer
    }
}
728x90

댓글

Designed by JB FACTORY