관리 메뉴

나만을 위한 블로그

[Algorithm] 프로그래머스 - 외계행성의 나이 (Kotlin) 본문

알고리즘 문제 풀이/프로그래머스

[Algorithm] 프로그래머스 - 외계행성의 나이 (Kotlin)

참깨빵위에참깨빵_ 2022. 12. 24. 20:06
728x90
반응형
모 행성에서는 나이를 알파벳으로 말한다. a는 0, b는 1, c는 2, ..., j는 9다
23살은 cd, 51살은 fb로 표현한다. 나이 age가 매개변수로 주어질 때 모 행성에서의 나이를
리턴하는 solution()을 완성하라

 

 

먼저 주먹구구식으로 푼 코드는 아래와 같다.

 

class Solution {
    fun solution(age: Int): String {
        val s = StringBuilder()
        val map = hashMapOf(
            0 to "a",
            1 to "b",
            2 to "c",
            3 to "d",
            4 to "e",
            5 to "f",
            6 to "g",
            7 to "h",
            8 to "i",
            9 to "j"
        )
        val list = age.toString().split("")
        list.forEach {
            if (it != "") {
                s.append(map[it.toInt()])
            }
        }

        return s.toString()
    }
}

 

문제에서 키와 밸류로 쓰면 좋을 것 같은 정보(a는 0, b는 1)가 있어서 Map을 사용해 풀었다. 그러나 split()을 하게 되면 잘라진 요소들의 앞뒤로 공백이 포함되어 if를 썼기 때문에 불필요한 공수가 더 들어간다.

Map을 안 쓴다면 if로 처리하는 방법도 있는데, if-else if가 너무 길어지면 개인적으로 보기 별로라서 when을 써봤다.

 

class Solution {
    fun solution(age: Int): String {
        val a = age.toString()
        return a.map {
            when (it) {
                '0' -> "a"
                '1' -> "b"
                '2' -> "c"
                '3' -> "d"
                '4' -> "e"
                '5' -> "f"
                '6' -> "g"
                '7' -> "h"
                '8' -> "i"
                '9' -> "j"
                else -> ""
            }
        }.joinToString("")
    }
}

 

map {} 자체가 List를 반환하기 때문에 이걸 쓰고 나서 리스트 안의 문자들을 연결해서 한 문자열로 만드는 joinToString()을 쓸 수 있다. 매개변수로 공백("")을 넣으면 공백없이 문자들이 연결된다. 이렇게 제출해도 정답으로 인정됐다.

반응형
Comments