본문 바로가기
코딩테스트

[프로그래머스] 모스부호(1)

by liz_devel 2025. 12. 23.

🗒 문제


📝 나의 문제풀이

class Solution {
    fun solution(letter: String): String {
		val morse = listOf(".-","-...","-.-.","-..",".","..-.","--.","....","..",".---",
                   "-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-",
                   "..-","...-",".--","-..-","-.--","--..")

		return letter.split(" ")               // 1. 공백 기준으로 모스부호 분리
                         .map{ morse.indexOf(it) + 'a'.code }  // 2. 모스부호 위치를 a부터의 ASCII 코드로 변환
                         .map{ it.toChar() }      // 3. ASCII 코드를 문자로 변환
                         .joinToString("")        // 4. 문자열로 합치기

    }
}
  • letter.split(" ")
    ".... . .-.. .-.. ---" → ["....", ".", ".-..", ".-..", "---"]
    모스부호 하나씩 분리
  • morse.indexOf(it) + 'a'.code
    • morse.indexOf(it) → 리스트에서 모스부호 위치 찾기 (0부터 시작)
    • 'a'.code → 'a'의 ASCII 값(97)
    • 위치 + 97 → 알파벳 ASCII 값으로 변환
    • 예: "...." → 7번째 → 7 + 97 = 104 → 'h'
  • it.toChar() → ASCII 값을 문자로 변환
  • joinToString("") → 문자들을 합쳐서 최종 문자열 반환

단점:

  • 모스부호와 알파벳 순서가 바뀌면 바로 고치기 어려움
  • 직관적이지 않음 (ASCII 계산)

📝 다른 사람의 문제 풀이

다른 사람의 문제 풀이는 좋아요 수가 높거나 많은 사람들이 푼 방법 기준으로 첨부하였습니다.

class Solution {
    private val dictionary = mapOf(
        ".-" to "a", "-..." to "b", "-.-." to "c", "-.." to "d", "." to "e", "..-." to "f", "--." to "g", "...." to "h", ".." to "i",
        ".---" to "j", "-.-" to "k", ".-.." to "l", "--" to "m", "-." to "n", "---" to "o", ".--." to "p", "--.-" to "q", ".-." to "r",
        "..." to "s", "-" to "t", "..-" to "u", "...-" to "v", ".--" to "w", "-..-" to "x", "-.--" to "y", "--.." to "z"
    )

    fun solution(letter: String) = letter.split(" ".toRegex()).map { dictionary[it] }.joinToString("")
}
  • dictionary: 모스부호 → 알파벳 매핑
    • 직접적으로 어떤 모스부호가 어떤 알파벳인지 명시적
  • letter.split(" ".toRegex())
    • 공백 기준으로 모스부호 분리
  • map { dictionary[it] }
    • 각 모스부호를 대응되는 알파벳으로 변환
  • joinToString("")
    • 최종 문자열 합치기

장점:

  • 가독성이 좋고 직관적
  • 모스부호와 알파벳 순서 바뀌어도 dictionary만 수정하면 됨

🖊 문제 풀이 시 알면 좋을 것

mapOf(... to ...) 설명

  • 개념: 키와 값 쌍으로 이루어진 맵(연관 배열) 생성
  • to 키워드: 키 to 값 형태로 쌍을 만듦

예시:

val dictionary = mapOf(
    "a" to 1,
    "b" to 2,
    "c" to 3
)
println(dictionary["b"])  // 2

 

모스부호 예시:

val morseDict = mapOf(".-" to "a", "-..." to "b")
println(morseDict[".-"]) // "a"

즉, 다른 사람 풀이에서는:

  1. 문자열을 공백으로 나눔 → 각 모스부호 단위
  2. map { dictionary[it] } → 모스부호를 알파벳으로 변환
  3. joinToString("") → 최종 문자열 생성
반응형