[ LeetCode ] 17 Letter Combinations of a Phone Number

codesver·2023년 6월 22일
0

LeetCode

목록 보기
6/24
post-thumbnail

📌 Problem

폰 자판기를 누르면 알파벳을 입력할 수 있다. 알파벳은 2번부터 9번 자판에 존재한다. 각각의 자판은 순서대로 a부터 3개의 알파벳을 가지고 있으며 7, 9번만 4개를 가진다. 최대 4의 길이를 가진 자판이 주어질 때(2 ~ 9까지의 숫자가 문자열로 이어짐) 순서대로 가능한 알파벳 목록을 반환하면 된다. 이때 자판을 누르면 랜덤한 알파벳이 나온다고 가정한다. 예를 들어 "23"이 주어지면 ["ad","ae","af","bd","be","bf","cd","ce","cf"]가 가능하다.

📌 Solution

최대 4의 길이만 주어지고 자판의 개수도 8개이기 때문에 단순 반복문으로 해결이 가능하다. 자판을 누르는 순서대로 기존에 있는 경우의 수에 현재 자판의 알파벳들을 하나씩 더하면 된다.

📌 Code

class Solution(
    private val buttons: Map<Char, List<String>> = mapOf(
        '2' to listOf("a", "b", "c"),
        '3' to listOf("d", "e", "f"),
        '4' to listOf("g", "h", "i"),
        '5' to listOf("j", "k", "l"),
        '6' to listOf("m", "n", "o"),
        '7' to listOf("p", "q", "r", "s"),
        '8' to listOf("t", "u", "v"),
        '9' to listOf("w", "x", "y", "z")
    )
) {
    fun letterCombinations(digits: String): List<String> =
        digits.fold(listOf()) { list, digit ->
            if (list.isEmpty()) buttons[digit]!!
            else mutableListOf<String>().apply {
                for (alphabet in buttons[digit]!!)
                    for (case in list) add(case + alphabet)
            }
        }
}
profile
Hello, Devs!

0개의 댓글